#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <queue>
#include <set>
#include <map>
#define LL long long
using namespace std;
const int MAXN = 100 + 10;
const int INF = 0x3f3f3f3f;
int dis[MAXN];
int vis[MAXN];
int G[MAXN][MAXN];
int N, S, T;
void Dijkstra()
{
memset(vis, 0, sizeof(vis));
for(int i=1;i<=N;i++) dis[i] = (i == S ? 0 : INF);
for(int i=1;i<=N;i++)
{
int x, m = INF;
for(int y=1;y<=N;y++) if(!vis[y] && dis[y] <= m) m = dis[x = y];
vis[x] = 1;
for(int y=1;y<=N;y++) dis[y] = min(dis[y], dis[x] + G[x][y]);
}
}
int main()
{
while(scanf("%d%d%d", &N, &S, &T)!=EOF)
{
for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
{
if(i == j) G[i][j] = 0;
else G[i][j] = INF;
}
}
for(int i=1;i<=N;i++)
{
int K, v;
scanf("%d", &K);
for(int j=0;j<K;j++)
{
scanf("%d", &v);
if(j) G[i][v] = 1;
else G[i][v] = 0;
}
}
Dijkstra();
if(dis[T] >= INF) printf("-1\n");
else printf("%d\n", dis[T]);
}
return 0;
}