#include<iostream>
#include<vector> #include<cstring>
using namespace std;
int father[1005],d[1010],n,m,i,j,x,y;
vector<int> vec[1005];
int find(int x){ if(father[x]==x) return x;
return father[x]=find(father[x]);
}
void unite(int x,int y){ int rx=find(x);
int ry=find(y);
if(rx!=ry) father[ry]=rx;
}
int main(){
cin>>n;
for(i=1;i<=n;++i)father[i]=i;
for(i=1;i<=n;++i){ scanf("%d",&m); for(j=1;j<=m;++j){
scanf("%d",&x);
vec[i].push_back(x);
}
}
for(i=n;i>=1;--i){
for(j=0;j<vec[i].size();++j){
if(vec[i][j]>i) unite(i,vec[i][j]); }
int mx=1;
memset(d,0,sizeof(d));
for(j=i;j<=n;++j)find(j);
for(j=i;j<=n;++j){
d[find(j)]++; mx=max(mx,d[find(j)]);
}
if(mx>n/2){
cout<<i;
return 0;
}
}
return 0;
}