#include <stdio.h>
void Enqueue(int q[100], int *l, int x, int dist[100], int tata)
{
q[*l]=x;
dist[x]=dist[tata]+1;
*l=*l+1;
}
void Afara(FILE* g, int q[100], int *l, int sol[100])
{
sol[q[0]]=1;
int i;
*l=*l-1;
for(i=0;i<*l;i++)
q[i]=q[i+1];
}
int NuEInCoada(int q[100], int l, int x)
{
int i;
for(i=0;i<l;i++)
if(q[i]==x)
return 0;
return 1;
}
int main ()
{
FILE *f=fopen("bfs.in", "rt"), *g=fopen("bfs.out", "wt");
int v[100][100]={{0}}, n, m, s;
int i,j, q[100]={0}, viz[100]={0}, dist[100]={0}, l=0;
fscanf(f, "%i %i %i", &n, &m, &s);
while(m--)
{
int x,y;
fscanf(f, "%i %i", &x, &y);
v[x][++v[x][0]]=y;
//v[y][++v[y][0]]=x;
}
q[0]=i=s; l=1;
while(l)
{
for(j=1;j<=v[i][0];j++)
if(viz[v[i][j]]==0 && NuEInCoada(q, l, v[i][j]))
Enqueue(q, &l, v[i][j], dist, i);
Afara(g, q, &l, viz);
i=q[0];
}
for(i=1;i<=n;i++)
fprintf(g,"%i ", (dist[i]==0 && i!=s) ? -1 : dist[i]);
return 0;
}