#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
vector<vector<int>>graf(200001);
vector<int>vizitat(200001);
void bfs_graf(int nod)
{
int i,curN;
for(i=0; i<vizitat.size(); i++)
{
vizitat[i] = -1;
}
vizitat[nod] = 0;
queue<int>noduri;
noduri.push(nod);
while(!noduri.empty())
{
curN = noduri.front();
noduri.pop();
for(i=0; i<graf[curN].size(); i++)
{
if(vizitat[graf[curN][i]]==-1)
{
vizitat[graf[curN][i]] = vizitat[curN] + 1;
noduri.push(graf[curN][i]);
}
}
}
}
int main()
{
int nr_varfuri,nr_arce,nod_sursa,i,x,y;
f>>nr_varfuri>>nr_arce>>nod_sursa;
for(i=0; i<nr_arce; i++)
{
f>>x>>y;
graf[x].push_back(y);
}
bfs_graf(nod_sursa);
for(i=1; i<=nr_varfuri; i++)
{
g<<vizitat[i]<<" ";
}
return 0;
}