#include<bits/stdc++.h>
#define INF 1e8
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
int n,m,k;
vector<vector<int>> adj;
vector<int>viz;
vector<int>dist;
void BFS(int k) {
queue<int>q;
q.push(k);
dist[k] =0;
while (!q.empty()) {
int nod = q.front();
q.pop();
for (int i : adj[nod]) {
if ( dist[i] > dist[nod]+1) {
dist[i] = dist[nod]+1;
q.push(i);
}
}
}
for (int i =1; i<= n ; i++) {
if ( dist[i] == INF) {
out << -1 << ' ';
}
else
out << dist[i] << ' ';
}
out << '\n';
}
int main() {
in >> n >> m >> k;
adj.resize(n+5);
viz.resize(n+5);
for (int i =1; i<= n ; i++) {
dist[i] = INF;
}
for (int i =1; i<= m ; i++) {
int x,y;
in >> x >> y;
adj[x].push_back(y);
}
BFS(k);
return 0;
}