#include<cstdio>
#include<iostream>
#include<fstream>
#include<queue>
#include<bitset>
#include<list>
using namespace std;
queue<int> q;
int x[100005];
list<int> v[100005];
int main()
{
//ifstream si;
//si.open("numere.in");
FILE* si=fopen("bfs.in","r");
//FILE* so=fopen("simetric1.out","w");
ofstream so;
so.open("bfs.out");
int n,m,s;
fscanf(si,"%i %i %i",&n,&m,&s);
int a,c;
int i;
for(i=0;i<m;++i)
{
fscanf(si,"%i %i",&a,&c);
v[a].push_back(c);
}
q.push(s);
int d=1;
bitset<100005> b;
b[s]=true;
list<int>::iterator j;
while(q.size())
{
m=q.size();
for(i=0;i<m;++i)
{
for(j=v[q.front()].begin();j!=v[q.front()].end();++j)
{
if(b[*j]==0)
{
q.push(*j);
b[*j]=1;
x[*j]=d;
}
}
q.pop();
}
++d;
}
for(i=1;i<=n;++i)
{
if(b[i]==0)
so<<-1<<' ';
else
so<<x[i]<<' ';
}
so<<'\n';
}