#include<fstream>
using namespace std;
struct nod
{
int v;
nod *urm;
};
void citire(int &n , nod*LA[],int&S)
{
fstream fin ;
int m,i,vf1,vf2;
nod*p;
fin.open("bfs.in",ios::in);
fin>>n>>m>>S;
for(i=1;i<=m;i++)
{
fin>>vf1>>vf2;
p=new nod;
p->v=vf2;
p->urm=LA[vf1];
LA[vf1]=p;
}
fin.close();
}
void bfs (int S,int n, nod* LA[])
{
int coada[100002],pr,ul,viz[100002],i;
nod*p;
for(i=1;i<=n;i++)
{viz[i]=-1;}
viz[S]=0;
coada[1]=S;
pr=1;
ul=1;
while(pr<=ul)
{
i=coada[pr];
for(p=LA[i];p!=0;p=p->urm)
{
if(viz[p->v]==-1)
{
ul++;
coada[ul]=p->v;
viz[p->v]=1+viz[i];
}
}
pr++;
}
fstream fout;
fstream("bfs.out",ios::out);
for(i=1;i<=n;i++)
{
fout<<viz[i]<<" ";
}
fout.close();
}
nod*LA[100002];
int n,S;
int main()
{
citire(n,LA,S);
bfs(S,n,LA);
return 0;
}