#include <iostream>
#include <stdio.h>
#include <queue>
#include <string.h>
using namespace std;
vector<int> A[100];
queue<int> q;
int cost[100],g[100];
int L;
void BFS(int nod){
int i,j;
int L;
memset(cost,-1,sizeof(cost));
q.push(nod);
while(!q.empty()){
for(i=0;i<g[q.front()];i++){
q.push(A[q.front()][i]);
L++;
cost[A[q.front()][i]]=cost[q.front()]+1;
}
q.pop();
}
}
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
int i, x, y,N ,M,Start;
scanf("%d %d %d ", &N, &M, &Start);
for (i = 1; i <= M; i++)
{
scanf("%d %d ", &x, &y);
A[x].push_back(y);
}
for (i = 1; i <= N; i++)
g[i] = A[i].size();
BFS(Start);
for (i = 1; i <= N; i++)
printf("%d ", cost[i]);
printf("\n");
return 0;
}