
#include<bits/stdc++.h>
#define f(i,j) f[i][j+4000]
typedef long long ll;
using namespace std;
const int maxn = 2007;
int n,g[maxn][maxn],hv[maxn],col[maxn],a[maxn][2],cnt=0,vis[maxn];
bool f[maxn][maxn*4];
void colorful(int u,int color,int id){
col[u]=color;
a[id][color]++;
for(int v = 1;v<=n;v++){
if(!g[u][v])continue;
if(!vis[v]){
if(col[v]==color){
cout << "No solution\n";
exit(0);
}
if(col[v]==-1)colorful(v,!color,id);
}
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
memset(col,-1,sizeof col);
for(int x,i = 1;i<=n;i++){
memset(hv,0,sizeof hv);
hv[i]=1;
while(1){
cin >> x;
if(!x)break;
hv[x]=1;
}
for(int j = 1;j<=n;j++){
if(hv[j])continue;
g[i][j]=g[j][i]=1;
}
}
for(int i = 1;i<=n;i++)
if(col[i]==-1)
colorful(i,0,++cnt);
f(0,0)=1;
for(int i = 1;i<=cnt;i++){
for(int j = -2000;j<=2000;j++){
f(i,j)=f(i-1,j-a[cnt][1]+a[cnt][0])|f(i-1,j-a[cnt][0]+a[cnt][1]);
}
}
int ans1,ans2;
for(int i = 0;i<=2000;i++){
if(f(cnt,i) || f(cnt,-i)){
ans1=min((n-i)/2,n-(n-i)/2),ans2=max((n-i)/2,n-(n-i)/2);
cout << ans1 << " " << ans2 << "\n";
return 0;
}
}
cout << "Nos solution\n";
return 0;
}