#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
using namespace std;
int viz[100005];
int dist[100005];
vector <int> graph[100005];
void BFS(int x)
{
queue <int> myq;
int index,i;
viz[x]=1;
dist[x]=0;
myq.push(x);
while(myq.empty()==0)
{
index=myq.front();
int lim=graph[index].size();
for(i=0;i<lim;i++)
{
if(viz[graph[index][i]]==0)
{
viz[graph[index][i]]=1;
dist[graph[index][i]]=dist[index]+1;
myq.push(graph[index][i]);
}
}
myq.pop();
}
}
int main()
{
ifstream in("bfs.in");
ofstream out("bfs.out");
int N,M,S,x,y;
in>>N>>M>>S;
int i;
for(i=0;i<M;i++)
{
in>>x>>y;
graph[x].push_back(y);
}
BFS(S);
for(i=1;i<=N;i++)
if(dist[i]==0 && i!=S)
dist[i]=-1;
for(i=1;i<=N;i++)
{
out<<dist[i]<<" ";
}
return 0;
}