#include<fstream>
#include<iostream>
#include<vector>
#include<queue>
#define MaxN 100010
using namespace std;
int N,Start,dist[MaxN];
vector <int> Muchie[MaxN];
queue <int> Queue;
void citire() {
ifstream in("bfs.in");
int M,x,y,i;
in>>N>>M>>Start;
for(i=1;i<=M;i++){
in>>x>>y;
Muchie[x].push_back(y);
}
in.close();
}
void solve() {
int i,vecin,nod;
Queue.push(Start);
dist[Start]=1;
while(!Queue.empty()){
nod=Queue.front();
Queue.pop();
for(i=0;i<Muchie[nod].size();i++) {
vecin=Muchie[nod][i];
if(!dist[vecin]) {
dist[vecin]=dist[nod]+1;
Queue.push(vecin);
}
}
}
}
void afisare() {
ofstream out("bfs.out");
for(int i=1;i<=N;i++)
out<<dist[i]-1<<' ';
out<<'\n';
out.close();
}
int main() {
citire();
solve();
afisare();
return 0;
}