#include <iostream>
#include <vector>
#include <fstream>
#include <queue>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
vector<vector<int>> construieste_lista(int n, int m) {
vector<vector<int>> lista(n+1);
int x, y;
for (int i = 1; i <= m; i++) {
in >> x >> y;
lista[x].push_back(y);
}
return lista;
}
vector<int> bfs(int n, int s, vector<vector<int>> adj) {
vector<int> dist(n + 1, -1);
queue<int> q;
dist[s]=0; // distanta sursei fata de ea insasi
q.push(s);
while (!q.empty()) {
int nod = q.front(); // iau nodul din fata cozii
q.pop(); // il scot
for (int vecin : adj[nod]) {
if (dist[vecin]==-1 ) { // conditia "vecinul nu a fost vizitat"
dist[vecin] = dist[nod]+1; // distanta lui, in functie de dist[nod]
q.push(vecin);
}
}
}
return dist;
}
int main() {
int n,m,s;
in>>n>>m>>s;
vector<vector<int>> adj = construieste_lista(n,m);
vector<int> dist = bfs(n, s, adj);
for (int i = 1; i <= n; i++)
out << dist[i] << " ";
return 0;
}