#include <fstream>
#include <vector>
#include <queue>
std::ifstream fin("bfs.in");
std::ofstream fout("bfs.out");
int main() {
int n, m, s, x, y, crt;
fin >> n >> m >> s;
std::queue<int> coada;
std::vector<int> dist(n+1, -1);
std::vector<std::vector<int>> graph(n+1);
while (fin >> x >> y) {
graph[x].push_back(y);
}
coada.push(s);
dist[s] = 0;
while (!coada.empty()) {
crt = coada.front();
coada.pop();
for (auto vecin : graph[crt]) {
if (dist[vecin] < 0 ) {
coada.push(vecin);
dist[vecin] = dist[crt] + 1;
}
}
}
// for (auto l:graph) {
// for (auto x : l)
// std::cout << x << " ";
// std::cout << std::endl;
// }
for (int i = 1; i <= n; i++)
fout << dist[i] << " ";
}