2点WA了QAQ
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int INF=0x3f3f3f3f;
const int N=1e5+5;
int n,m,s,t,k;
struct Edge{
int v,w;
Edge(int v,int w):v(v),w(w){}
};
struct Node{
int u,d;
Node(int u,int d):u(u),d(d){}
bool operator < (const Node &a) const{
return d>a.d;
}
};
int d[N],vis[N];
vector<Edge> adj[N];
void dij(){
memset(d,INF,sizeof(d));
d[s]=0;
priority_queue<Node>q;
q.push(Node(s,0));
while(!q.empty()){
int u=q.top().u;
q.pop();
if(u==t)return;
if(vis[u])continue;
vis[u]=1;
for(int i=0;i<adj[u].size();i++){
int v=adj[u][i].v;
int w=adj[u][i].w;
if(d[v]>d[u]+w){
d[v]=d[u]+w;
q.push(Node(v,d[v]));
}
}
}
}
signed main(){
cin>>n>>s>>t;
int u,v,w;
for(int u=1;u<=n;u++){
cin>>k;
for(int i=1;i<=k;i++){
cin>>v;
if(i==1)w=0;
else w=1;
adj[u].push_back(Edge(v,w));
}
}
dij();
if(d[t]!=INF)cout<<d[t];
else cout<<-1;
return 0;
}