#include<bits/stdc++.h>
using namespace std;
char in[100], out[100];

int main(){
	for(int I=1;I<=20;I++){
		queue <int> q[110], r[110], ans[110];
		int n, m, i, j, a, b, s=0;
		sprintf(in,".%d.in",I);
	    freopen(in,"w",stdout);
		//scanf("%d", &n);
		//scanf("%d", &m);
		n = I * 5;
		m = I;
		printf("%d\n%d\n",n,m);
		for(i=1; i<=n; i++){
			a = rand()%100 + 1;
			//scanf("%d", &a);
			printf("%d ", a);
			for(j=1;j<=a;j++){
				b = rand()%m+1;
				printf("%d",b);
				if(j==a) printf("\n");
				else printf(" ");
				//scanf("%d", &b);
				q[i].push(b);
			}
		}
		for(i=1; i<=n; i++){
			r[q[i].front()].push(i);
			q[i].pop();
		}
		while(s<m){
			s = 0;
			queue <int> temp[110];
			for(i=1; i<=m; i++){
				if(r[i].empty()) s++;
				else{
					a = r[i].front();
					r[i].pop();
					if(!q[a].empty()){
						temp[q[a].front()].push(a);
						q[a].pop();
					}
					ans[i].push(a);
				}
			}
			for(i=1; i<=m; i++){
                while(!temp[i].empty()){
                    r[i].push(temp[i].front());
                    temp[i].pop();
                }
			}
		}

		sprintf(in,".%d.out",I);
	    freopen(in,"w",stdout);
		for(i=1;i<=m;i++){
			printf("%d ", ans[i].size());
			while(!ans[i].empty()){
				printf("%d ", ans[i].front());
				ans[i].pop();
			}
			printf("\n");
		}
	}
}
