#include <fstream>
#include <vector>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
vector <int> graph[100001];
int i, Nods, Arcs, Origins, dis[100001], x, y, q[100001];
bool viz[100001];
void bfs(int start){
viz[start] = 1;
int p = 0, u = 0;
dis[start] = 0;
q[p] = start;
while(p <= u){
int node = q[p];
p++;
for(int i = 0; i < graph[node].size(); i++)
if(viz[graph[node][i]] == 0){
q[++u] = graph[node][i];
dis[graph[node][i]] = dis[node] + 1;
viz[graph[node][i]] = 1;
}
}
}
int main()
{ f >> Nods >> Arcs >> Origins;
for(i = 1; i <= Arcs; i++){
f >> x >> y;
graph[x].push_back(y);
}
bfs(Origins);
for(i = 1; i <= Nods; i++)
if(dis[i] == 0 && Origins != i)
g << -1 << ' ';
else
g << dis[i] << ' ';
return 0;
}