#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
template<typename T> void read(T&x){
int sign=1;x=0;char c;
do{c=getchar();if(c=='-')sign=-1;}while(!isdigit(c));
do{x=x*10+c-'0';c=getchar();}while(isdigit(c));
x*=sign;
}
const int N=1e4;
int n,x,m,y,sum;
int in[N],a[N],head[N*4];
queue<int> q;
int t[N];
int Max=-1e9;
int ans;
struct op
{
int to,next;
}e[N*4];
void add(int x,int y)
{
e[sum].next=head[x];
e[sum].to=y;
head[x]=sum++;
}
int len;
void top(){
for(int i=1;i<=Max;i++){
if(in[i]==0&&t[i]!=0){
q.push(i);
ans--;
}
}
while(!q.empty()){
int l=q.front(); q.pop();
for(int i=head[x];i!=-1;i=e[i].next){
int r=e[i].to;
in[r]--;
if(in[r]==0&&t[r]!=0){
ans--;
q.push(r);
}
}
}
}
signed main(){
memset(head,-1,sizeof(head));
ios::sync_with_stdio(0);
cout.tie(0);
read(n);
ans=n;
for(int i=1;i<=n;i++){
read(x);
t[x]++;
read(m);
for(int j=1;j<=m;j++){
read(y);
add(x,y);
in[y]++;
}
Max=max(Max,x);
}
top();
if(ans==0){
cout<<"YES";
}
else{
cout<<ans;
}
return 0;
}