#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin ("bfs.in");
ofstream fout ("bfs.out");
vector <int > v[100005];
queue <int > coada;
bool incoada[100005];
int n, m, d[100005], k;
void citire()
{fin >> n >> m >> k;
int a, b;
for (int i=1;i<=m;i++)
{fin >> a >> b;
v[a].push_back(b);
}
}
void bfs(int k)
{incoada[k]=true;
coada.push(k);
while (!coada.empty())
{int elem=coada.front();
coada.pop();
for (int i=0;i<v[elem].size();i++)
{int vecin=v[elem][i];
if(incoada[vecin]==false)
{incoada[vecin]=true;
coada.push(vecin);
d[vecin]=d[elem]+1;
}
}
}
}
int main()
{citire ();
bfs(k);
for (int i=1;i<=n;i++)
if(d[i]==0 && k!=i)fout << -1 << " ";
else fout << d[i] << " ";
return 0;
}