#include<bits/stdc++.h>
using namespace std;
const int N=1e2+10;
bool dp[N][N],know[N][N],book[N];
int colour[N],r[N][N],head[N][N];
int sum,ans,n,ar;
vector<int>vec[N][3];
void dfs(int x,int fa,int c){
colour[x]=c;
vec[sum][c].push_back(x);
for(int i=1;i<=n;i++){
if(!know[x][i]&&i!=x&&i!=fa){
if(!colour[i]) dfs(i,x,3-c);
else{
if(colour[i]==c){
cout<<"No solution";
exit(0);
}
}
}
}
}
void bag01(){
dp[0][0]=1;
for(int i=1;i<=sum;i++){
for(int j=1;j<=n;j++){
if(j>=vec[i][0].size()&&dp[i-1][j-vec[i][0].size()])
dp[i][j]=1,r[i][j]=1,head[i][j]=j-vec[i][0].size();
if(j>=vec[i][1].size()&&dp[i-1][j-vec[i][1].size()])
dp[i][j]=1,r[i][j]=2,head[i][j]=j-vec[i][1].size();
}
}
for(int i=n/2;i>=1;i--){
if(dp[sum][i]){
ans=i;
return;
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin>>n;
for(int i=1;i<=n;i++){
while(cin>>ar){
if(ar==0) break;
else know[i][ar]=1;
}
}
for(int i=1;i<=n;i++){
if(!colour[i]){
sum++;
dfs(i,0,1);
}
}
bag01();
cout<<ans<<" ";
int a=sum,b=ans;
while(a&&b){
for(int i=0;i<vec[a][r[a][b]].size();i++){
book[vec[a][r[a][b]][i]]++;
}
b=head[a--][b];
}
for(int i=1;i<=n;i++)
if(book[i]) cout<<i<<" ";
cout<<endl<<n-ans<<" ";
for(int i=1;i<=n;i++)
if(!book[i]) cout<<i<<" ";
return 0;
}