爱摸鱼的Dillonh
题号:NC21721
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

“我不做人啦,jojo!”

“Dillonh起来回答问题!”

“啊?”沉迷于jojo的Dillonh又一次上课摸鱼被老师抓到了,他慌忙地抬起头看着讲台上火冒三丈的老师。

“给你一个数n,现在要找到一个集合,中若干数,使得,同时对于任意的i和j()都要满足,你能找到所有满足这个条件的集合吗。如果对于这个数n有无限多个可能的集合,那么就输出-1,否则就输出所有不同的集合。”如果眼神能杀人的话,此刻的Dillonh就已经被他的老师杀了千万遍了。

“这...”沉迷摸鱼的Dillonh自然是不会做这个题的,他现在急的满头大汗。作为聪明的ACMer,你能帮他解决这个问题吗?

(对于两个集合,如果两个集合内元素的个数不同的话,就认为这两个集合是不同的;如果这两个集合内元素个数相同的话,如果两个集合内的元素不论以任何顺序排序之后,仍然是不完全相同的话,那么就认为这两个集合是不同的)。

输入描述:

第一行一个数字T,代表有T组测试样例(T<=100)

对于每组测试样例都会输入一个数字n,代表老师提出的问题的数。()。

输出描述:

对于每组测试样例,第一行输出一个“Case #x:”,x代表当前为第几组测试样例。

如果有无限多个满足条件的集合,第二行就输出“-1”;

否则的话,第二行输出一个数字m,代表有m个集合是满足条件的。

接下来m行输出这m个集合的信息,按集合内元素个数的大小从小到大输出,

每行的第一个数num代表集合内元素的个数,接下来按从小到大输出num个数。每行的两个数之间用一个空格隔开,行末不要有空格。
示例1

输入

复制
2
12
1

输出

复制
Case #1:
3
1 12
2 3 4
3 2 2 3
Case #2:
-1