#include <bits/stdc++.h>
#define MAXN 100000
#define MAXM 20000000
using namespace std;
int n,head[MAXN],ans=-9999,tot=1,indegree[MAXN],sh[MAXN];
queue<int> q;
struct node{
int to,nxt;
}edge[MAXM];
void addedge(int a,int b){
edge[tot].to=b;
edge[tot].nxt=head[a];
head[a]=tot;
indegree[b]++;
tot++;
}
int topsort(){
int temp=0;
for(int i=1;i<=n;i++){
if(indegree[i]==0&&sh[i]==1){
q.push(i);
}
}
while(!q.empty()){
for(int k=head[q.front()];k;k=edge[k].nxt){
int v=edge[k].to;
indegree[v]--;
if(indegree[v]==0){
q.push(v);
}
}
temp++;
q.pop();
}
return temp;
}
int main(){
memset(sh,0,sizeof(sh));
memset(head,0xff,sizeof(head));
memset(indegree,0,sizeof(indegree));
cin>>n;
for(int i=1;i<=n;i++){
int x,m;
cin>>x>>m;
sh[x]=1;
for(int i=1;i<=m;i++){
int y;
cin>>y;
addedge(x,y);
}
}
int p=topsort();
if(p==n) cout<<"YES"<<endl;
else
cout<<(n-p)<<endl;
return 0;
}