#include <bits/stdc++.h>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
const int nmax=1e5 +1, mmax=1e6;
int N, M, S;
vector<int> G[nmax];
int drum[nmax];
queue<int> coada;
int main()
{
fin >> N >> M >> S;
int x, y;
for(int i=0; i<M; i++)
{
fin >> x >> y;
G[x].push_back(y);
}
for(int i=1; i<=N; i++)
drum[i]=mmax;
drum[S]=0;
coada.push(S);
while(!coada.empty())
{
for(auto i: G[coada.front()])
if(drum[i]==mmax)
{
drum[i]=1+drum[coada.front()];
coada.push(i);
}
coada.pop();
}
for(int i=1; i<=N; i++)
{
if(drum[i]==mmax)
fout << -1 << ' ';
else
fout << drum[i] << ' ';
}
return 0;
}