using namespace std;
struct edge{
int v,w,next;
}e[100010];
struct node{
int w,v;
bool operator <(const node &x)const{
return w>x.w;
}
};
priority_queue<node>q;
int n,vis[100010],dis[100010],head[100010],m,cnt,a,b;
void add(int u,int v,int w){
e[++cnt].v=v;
e[cnt].w=w;
e[cnt].next=head[u];
head[u]=cnt;
}
void dij(){
for(int i=1;i<=n;i++){
dis[i]=11451400;
}
dis[a]=0;
q.push((node){0,a});
while(!q.empty()){
node x=q.top();
q.pop();
int u=x.v;
if(vis[u])continue;
vis[u]=1;
for(int i=head[u];i;i=e[i].next){
int v=e[i].v;
if(dis[v]>dis[u]+e[i].w){
dis[v]=dis[u]+e[i].w;
q.push((node){dis[v],v});
}
}
}
}
int main(){
cin>>n>>a>>b;
for(int i=1;i<=n;i++){
int v,k;
cin>>k;
for(int j=1;j<=k;j++){
cin>>v;
if(j==1){
add(i,v,0);
}
else add(i,v,1);
}
}
if(dis[b]==11451400)cout<<-1;
cout<<dis[b]<<endl;
}
迪杰斯特拉 ,但是只有30