#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
//  by zrt
//  problem:
//  无论你在什么时候开始，重要的是开始以后就不要停止。
using namespace std ;
typedef long long LL ;
const double eps(1e-10) ;
const int inf(0x3f3f3f3f) ;
int n,S,T;
int in[105];
int H[105],X[40000],P[40000],flow[40000],tot;
inline void add(int x,int y,int z){
	P[++tot]=y;X[tot]=H[x];H[x]=tot;flow[tot]=z;
}
int m;
int d[105];
queue<int> q;
bool bfs(){
	memset(d,0,sizeof d);
	d[S]=1;q.push(S);int x;
	while(!q.empty()){
		x=q.front();q.pop();
		for(int i=H[x];i;i=X[i]){
			if(flow[i]>0&&!d[P[i]]){
				d[P[i]]=d[x]+1;q.push(P[i]);
			}
		}
	}
	return d[T];
}
int dfs(int x,int a){
	if(x==T||a==0) return a;
	int tmp,f=a;
	for(int i=H[x];i;i=X[i]){
		if(flow[i]>0&&d[P[i]]==d[x]+1){
			tmp=dfs(P[i],min(flow[i],a));
			a-=tmp;
			flow[i]-=tmp;
			flow[i^1]+=tmp;
			if(!a) break;
		}
	}
	if(f==a) d[x]=-1;
	return f-a;
}
int Dinic(){
	int f(0);
	while(bfs()) f+=dfs(S,inf);
	return f;
}
int stk[105],top;
void dfs(int x){
	stk[top++]=x;
	for(int j=H[x];j;j=X[j]){
		if(!(j&1)&&P[j]<=n&&flow[j^1]>0){
			flow[j^1]--;
			dfs(P[j]);
			break;
		//	printf("#%d %d %d\n",x,P[j],flow[j^1]);
		}
	}
}
int main(){
	#ifdef LOCAL
	freopen("in.txt","r",stdin) ;
	freopen("out.txt","w",stdout) ;
	#endif
//	S=104,T=103;
	while(~scanf("%d",&n)){
		S=104,T=103;
		memset(in,0,sizeof in);
		memset(H,0,sizeof H);
		tot=1;
		for(int i=1;i<=n;i++){
			scanf("%d",&m);
			in[i]-=m;
			for(int j=0,x;j<m;j++){
				scanf("%d",&x);
				in[x]++;
				add(i,x,inf);
				add(x,i,0);
			}
		}
		
		int ans(0);
		for(int i=1;i<=n;i++){
			if(in[i]>0) add(S,i,in[i]),add(i,S,0);
			else if(in[i]<0) add(i,T,-in[i]),add(T,i,0),ans-=in[i];//绝对满载 
		}
		
	//	swap(S,T);//反向最大流 
		ans-=Dinic();
		printf("%d\n",ans); 
	//	memset(in,0,sizeof in);
		for(int i=1;i<=n;i++){
			for(int j=H[i];j;j=X[j]){
				if((j&1)&&P[j]<=n){
					in[P[j]]-=flow[j];
					in[i]+=flow[j];
					flow[j]++;
				}
			}
		}
		for(int i=1;i<=n;i++){
			while(in[i]<0){
				top=0;
				
				dfs(i);
				if(top>1){
					in[i]++;
					in[stk[top-1]]--;
					printf("%d",stk[0]);
					for(int j=1;j<top;j++) printf(" %d",stk[j]);
					puts("");
				}
			}
		}
		
	}
	return 0 ;
}
