#include<iostream>
#include<queue>
using namespace std;
const int MAXN=1005;
struct edge{
int v,next;
}e[MAXN];
int tot,head[MAXN],din[MAXN];
void addedge(int u,int v){
e[++tot]=(edge){v,head[u]};
head[u]=tot;
din[v]++;
return;
}
bool vis[MAXN];
int n,ans;
int main(){
cin>>n;ans=n;
for(int i=1;i<=n;i++){
int u,m;
cin>>u>>m;
for(int i=1;i<=m;i++){
int v;
cin>>v;
addedge(u,v);
}
}
for(int i=1;i<=n;i++){
queue<int> q;
for(int j=1;j<=n;j++)
if(din[j]==0&&!vis[j]) q.push(j);
while(!q.empty()){
int x=q.front();q.pop();
for(int i=head[x];i;i=e[i].next){
int v=e[i].v;
din[v]--;
}
vis[x]=true;
ans--;
}
}
if(ans==0) cout<<"YES"<<endl;
else cout<<ans<<endl;
return 0;
}