#include <iostream>
#include <fstream>
#include <vector>
#include <deque>
using namespace std;
vector <int> drum[1000001];
deque <int> coada;
int val[100001];
int n,m,k;
ifstream f("bfs.in");
ofstream g("bfs.out");
int main()
{
f >> n >> m >> k;
for (int i=1;i<=m;++i)
{
int x,y;
f >> x >> y;
drum[x].push_back(y);
}
for (int i=1; i<=n; i++)
{
val[i] = -1;
}
coada.push_back(k);
val[k] = 0;
// val -1 0 -1 -1 -1
while (!coada.empty())
{
int nod = coada.front();
// nod = 2
for (int i=0; i<drum[nod].size(); ++i)
{
int t = drum[nod][i];
if (val[t] == -1)
{ val[t] = val[nod] + 1;
coada.push_back(t);
}
}
coada.pop_front();
}
for (int i=1; i<=n; ++i)
g << val[i] << " " ;
return 0;
}