#include <fstream>
#include <vector>
#include <queue>
using namespace std;
int main()
{
ifstream cin("bfs.in");
ofstream cout("bfs.out");
int N, M, S, x, y;
cin >> N >> M >> S;
vector<vector<int>> graph(N, vector<int>{});
vector<bool> visited(N, false);
vector<int> cost(N, -1);
for(int i = 0; i < M; ++i){
cin >> x >> y;
graph[--x].push_back(--y);
}
queue<int> Q;
Q.push(--S);
visited[S] = true; cost[S] = 0;
while(!Q.empty()){
for(auto vecin : graph[Q.front()]){
if(!visited[vecin]){
Q.push(vecin);
visited[vecin] = true;
cost[vecin] = cost[Q.front()] + 1;
}
}
Q.pop();
}
for(auto c : cost)
cout << c << " ";
cin.close();
cout.close();
return 0;
}