#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define ll long long
#define all(x) (x).begin(), (x).end()
#define MASK(i) (1LL<<(i))
#define BIT(i,n) (((n)>>(i)) & 1LL)
template <class X, class Y> bool minimize(X& x, const Y& y) {
if(x > y){ x = y; return 1; }
return 0;
}
template <class X, class Y> bool maximize(X& x, const Y& y) {
if(x < y){ x = y; return 1; }
return 0;
}
const int N = 1e5 + 5;
int n, m, st, dist[N];
vector<int> adj[N];
void bfs(const int &st)
{
queue<int> qu;
dist[st] = 0;
qu.push(st);
while(!qu.empty()){
int x = qu.front(); qu.pop();
for(const auto &y : adj[x]) {
if(minimize(dist[y], dist[x] + 1))
qu.push(y);
}
}
}
int main()
{
ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define file "thieufilethinguhetcuu"
if(fopen(file".inp","r")){
freopen(file".inp","r",stdin);
freopen(file".out","w",stdout);
}
cin >> n >> m >> st;
for(int i = 1; i <= m; ++i){
int u, v; cin >> u >> v;
adj[u].emplace_back(v);
adj[v].emplace_back(u);
}
memset(dist, 0x3f, sizeof (dist));
bfs(st);
for(int i = 1; i <= n; ++i)
cout << (dist[i] <= 1e9 ? dist[i] : -1) << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBhbGwoeCkgKHgpLmJlZ2luKCksICh4KS5lbmQoKQojZGVmaW5lIE1BU0soaSkgKDFMTDw8KGkpKQojZGVmaW5lIEJJVChpLG4pICgoKG4pPj4oaSkpICYgMUxMKQoKdGVtcGxhdGUgPGNsYXNzIFgsIGNsYXNzIFk+IGJvb2wgbWluaW1pemUoWCYgeCwgY29uc3QgWSYgeSkgewogICAgaWYoeCA+IHkpeyB4ID0geTsgcmV0dXJuIDE7IH0KICAgIHJldHVybiAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgWCwgY2xhc3MgWT4gYm9vbCBtYXhpbWl6ZShYJiB4LCBjb25zdCBZJiB5KSB7CiAgICBpZih4IDwgeSl7IHggPSB5OyByZXR1cm4gMTsgfQogICAgcmV0dXJuIDA7Cn0KCmNvbnN0IGludCBOID0gMWU1ICsgNTsKCmludCBuLCBtLCBzdCwgZGlzdFtOXTsKdmVjdG9yPGludD4gYWRqW05dOwoKdm9pZCBiZnMoY29uc3QgaW50ICZzdCkKewogICAgcXVldWU8aW50PiBxdTsKICAgIGRpc3Rbc3RdID0gMDsKICAgIHF1LnB1c2goc3QpOwogICAgd2hpbGUoIXF1LmVtcHR5KCkpewogICAgICAgIGludCB4ID0gcXUuZnJvbnQoKTsgcXUucG9wKCk7CiAgICAgICAgZm9yKGNvbnN0IGF1dG8gJnkgOiBhZGpbeF0pIHsKICAgICAgICAgICAgaWYobWluaW1pemUoZGlzdFt5XSwgZGlzdFt4XSArIDEpKQogICAgICAgICAgICAgICAgcXUucHVzaCh5KTsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKSxjaW4udGllKDApLGNvdXQudGllKDApOwogICAgI2RlZmluZSBmaWxlICJ0aGlldWZpbGV0aGluZ3VoZXRjdXUiCiAgICBpZihmb3BlbihmaWxlIi5pbnAiLCJyIikpewogICAgICAgIGZyZW9wZW4oZmlsZSIuaW5wIiwiciIsc3RkaW4pOwogICAgICAgIGZyZW9wZW4oZmlsZSIub3V0IiwidyIsc3Rkb3V0KTsKICAgIH0KCiAgICBjaW4gPj4gbiA+PiBtID4+IHN0OwogICAgZm9yKGludCBpID0gMTsgaSA8PSBtOyArK2kpewogICAgICAgIGludCB1LCB2OyBjaW4gPj4gdSA+PiB2OwogICAgICAgIGFkalt1XS5lbXBsYWNlX2JhY2sodik7CiAgICAgICAgYWRqW3ZdLmVtcGxhY2VfYmFjayh1KTsKICAgIH0KCiAgICBtZW1zZXQoZGlzdCwgMHgzZiwgc2l6ZW9mIChkaXN0KSk7CiAgICBiZnMoc3QpOwoKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgKytpKQogICAgICAgIGNvdXQgPDwgKGRpc3RbaV0gPD0gMWU5ID8gZGlzdFtpXSA6IC0xKSA8PCAiXG4iOwogICAgcmV0dXJuIDA7Cn0K