#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
int n,m,i,j,a[101][101],s[401],b[401],sum[401],id[401],t,ans,pre[101][101],k,x,l,r,res1,res2,f[401],g[101][101],ans1[101],ans2[101];
int find(int x){
if(x==f[x]) return f[x];
int root=find(f[x]);
return f[x]=root;
}
void deal(int x,int y){
f[find(x)]=find(y);
return;
}
signed main(){
cin>>n;
for(i=1;i<=n;i++){
while(cin>>x&&x!=0) a[i][x]=1;
f[i]=i,f[i+n]=i+n;
}
for(i=1;i<n;i++){
for(j=i+1;j<=n;j++){
if(a[i][j]*a[j][i]==0){
if(find(i)==find(j)){
cout<<"No solution"<<endl;
return 0;
}
deal(i,j+n),deal(j,i+n);
}
}
}
for(i=1;i<=n;i++){
if(!b[find(i)]){
id[++k]=i,b[find(i)]=1;
for(j=1;j<=n;j++){
if(find(i)==find(j)) sum[k]++;
}
}
}
g[0][0]=1;
for(i=1;i<=k;i++){
for(j=0;j<=n/2;j++){
t=j-sum[i];
if(t>=0&&g[i-1][t]) g[i][j]=1,pre[i][j]=1;
t=j;
if(g[i-1][t]) g[i][j]=1,pre[i][j]=0;
}
}
for(i=n/2;i>=0;i--){
if(g[k][i]){
x=i;
break;
}
}
if(x==0){
cout<<"No solution"<<endl;
return 0;
}
for(i=k;i>=1;i--){
if(pre[i][x]){
x-=sum[i];
for(j=1;j<=n;j++){
if(find(id[i])==find(j)){
ans1[++res1]=j;
}
}
}
else{
for(j=1;j<=n;j++){
if(find(id[i])==find(j)){
ans2[++res2]=j;
}
}
}
}
sort(ans1+1,ans1+1+res1),sort(ans2+1,ans2+1+res2);
cout<<res1<<" ";
for(i=1;i<=res1;i++) cout<<ans1[i]<<" ";
cout<<endl<<res2<<" ";
for(i=1;i<=res2;i++) cout<<ans2[i]<<" ";
return 0;
}