1 #include <cstdio>
2 #include <cmath>
3 #include <cstring>
4 #include <algorithm>
5 #include <queue>
6 #include <stack>
7 #include <vector>
8 #include <iomanip>
9 using namespace std;
10 int n,s,t,d[150];
11 vector<pair<int,int> >e[150];
12 int main(int argc, char *argv[])
13 {
14 scanf("%d%d%d",&n,&s,&t);
15 for(int i=1;i<=n;i++)
16 {
17 int m;
18 scanf("%d",&m);
19 for(int j=0;j<m;j++)
20 {
21 int k;
22 scanf("%d",&k);
23 if(j!=0)
24 e[i].push_back(make_pair(k,1));
25 else
26 e[i].push_back(make_pair(k,0));
27 }
28 }
29 memset(d,0x3f3f3f3f,sizeof(d));
30 d[s]=0;
31 priority_queue<pair<int,int> >q;
32 q.push(make_pair(-d[s],s));
33 while(!q.empty())
34 {
35 int now=q.top().second;q.pop();
36 for(int i=0;i<e[now].size();i++)
37 {
38 int v=e[now][i].first;
39 if(d[v]>d[now]+e[now][i].second)
40 {
41 d[v]=d[now]+e[now][i].second;
42 q.push(make_pair(-d[v],v));
43 }
44
45 }
46 }
47 if(d[t]==0x3f3f3f3f)
48 printf("-1\n");
49 else
50 printf("%d\n",d[t]);
51 return 0;
52 }