#include <bits/stdc++.h>
using namespace std;
vector<int> height(1e5+7);
void DFS(int node, vector<vector<int>>& g, vector<int>& visited, vector<int>& parent){
visited[node] = 1;
int h = 0;
for (auto &i : g[node]){
if(visited[i] == 0){
parent[i] = node;
DFS(i, g, visited, parent);
}
}
for (auto child : g[node]){
if(child != parent[node]){
h = max(h, height[child]);
}
}
height[node] = h+1;
}
int main() {
int n,e;
cin >> n >> e;
vector<vector<int>> g(n+5);
for (int i = 0; i < e; i++){
int a, b;
cin >> a >> b;
g[a].push_back(b);
g[b].push_back(a);
}
int source;
cin >> source;
vector<int> visited(n+5, 0);
vector<int> parent(n+5, 0);
DFS(source, g, visited, parent);
for (int i = 1; i <= n; i++){
cout << height[i] << " ";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZlY3RvcjxpbnQ+IGhlaWdodCgxZTUrNyk7Cgp2b2lkIERGUyhpbnQgbm9kZSwgdmVjdG9yPHZlY3RvcjxpbnQ+PiYgZywgdmVjdG9yPGludD4mIHZpc2l0ZWQsIHZlY3RvcjxpbnQ+JiBwYXJlbnQpewoJCgl2aXNpdGVkW25vZGVdID0gMTsKCWludCBoID0gMDsKCWZvciAoYXV0byAmaSA6IGdbbm9kZV0pewoJCWlmKHZpc2l0ZWRbaV0gPT0gMCl7CgkJCXBhcmVudFtpXSA9IG5vZGU7CgkJCURGUyhpLCBnLCB2aXNpdGVkLCBwYXJlbnQpOwoJCX0KCX0KCQoJZm9yIChhdXRvIGNoaWxkIDogZ1tub2RlXSl7CgkJaWYoY2hpbGQgIT0gcGFyZW50W25vZGVdKXsKCQkJaCA9IG1heChoLCBoZWlnaHRbY2hpbGRdKTsKCQl9Cgl9CgkKCWhlaWdodFtub2RlXSA9IGgrMTsKfQoKaW50IG1haW4oKSB7CgkKCWludCBuLGU7CgljaW4gPj4gbiA+PiBlOwoJCgl2ZWN0b3I8dmVjdG9yPGludD4+IGcobis1KTsKCQoJZm9yIChpbnQgaSA9IDA7IGkgPCBlOyBpKyspewoJCWludCBhLCBiOwoJCWNpbiA+PiBhID4+IGI7CgkJZ1thXS5wdXNoX2JhY2soYik7CgkJZ1tiXS5wdXNoX2JhY2soYSk7Cgl9CgkKCWludCBzb3VyY2U7IAogICAgY2luID4+IHNvdXJjZTsKCQoJdmVjdG9yPGludD4gdmlzaXRlZChuKzUsIDApOwoJdmVjdG9yPGludD4gcGFyZW50KG4rNSwgMCk7CgkKCURGUyhzb3VyY2UsIGcsIHZpc2l0ZWQsIHBhcmVudCk7CgkKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CgkJY291dCA8PCBoZWlnaHRbaV0gPDwgIiAiOwoJfQoJCglyZXR1cm4gMDsKfQ==