#include<bits/stdc++.h> // below comment for pbds
#include<ext/pb_ds/assoc_container.hpp> // to use it make ordered_set
#include<ext/pb_ds/tree_policy.hpp> // all set fnct + = 1. order_of_key(x); // number of
#define ll long long //element strictly smaller than it;
#define ld long double // 2. find_by_order(x),pointer el at x pos after sort use as s.f();
#define ordered_set tree<ll, null_type,less<ll>, rb_tree_tag,tree_order_statistics_node_update>
using namespace std; // assert(a[i]<n ) // if we want to check for special cond , used for debug
using namespace __gnu_pbds; // make less_equal in order to make a multiset pbds
#define INF (ll)1e18
const ll Mod = (ll)1e9+7;
ll CaseN=1;
const ld PI = 22/7.0;
ll tst()
{
ll ans=0;
return ans;
}
vector<vector<ll>> g(1002);
vector<bool> vis(1002,false);
ll n,m;
vector<ll> d(1002,LLONG_MAX);
queue<ll> q;
ll s;
//ll dis=0;
void bfs(ll src)
{
while(!q.empty())
{
//dis++;
ll p = q.front();
//cout<<p<<"+";
vis[p]=true;
q.pop();
for(auto x: g[p])
{
if(vis[x]==false)
{
q.push(x);
d[x]= min(d[x],d[p]+1);
//d[x]=min(d[x],dis);
}
}
}
return;
}
void solve()
{
cin>>n>>m;
//q.clear();
for(ll i=1;i<=n;i++)
{
vis[i]=false;
g[i].clear();
d[i]=LLONG_MAX;
}
for(ll i=0;i<m;i++)
{
ll u,v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
cin>>s;
q.push(s);
d[s]=0;
//cout<<"::"<<d[3]<<endl;
bfs(s);
//cout<<endl;
for(ll i=1;i<=n;i++)
{
if(i==s)
{
continue;
}
if(d[i]==LLONG_MAX)
cout<<"-1"<<" ";
else
cout<<d[i]*6<<" ";
}
cout<<endl;
//cout<<"Case #"<<CaseN<<": ";
CaseN++;
// print your ans below;
return ;
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ll t=1;
cin>>t;
while(t--)
{
solve();
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4gICAgICAgICAgICAgICAgICAgLy8gYmVsb3cgY29tbWVudCBmb3IgcGJkcwojaW5jbHVkZTxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4gICAvLyB0byB1c2UgaXQgbWFrZSBvcmRlcmVkX3NldAojaW5jbHVkZTxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPiAgICAgICAvLyBhbGwgc2V0IGZuY3QgKyA9IDEuIG9yZGVyX29mX2tleSh4KTsgLy8gbnVtYmVyIG9mIAojZGVmaW5lIGxsIGxvbmcgbG9uZyAgICAgICAgICAgICAgICAgICAgICAvL2VsZW1lbnQgc3RyaWN0bHkgc21hbGxlciB0aGFuIGl0OwojZGVmaW5lIGxkIGxvbmcgZG91YmxlICAgICAgICAgICAgICAgICAgICAvLyAyLiBmaW5kX2J5X29yZGVyKHgpLHBvaW50ZXIgZWwgYXQgeCBwb3MgYWZ0ZXIgc29ydCAgdXNlIGFzIHMuZigpOwojZGVmaW5lIG9yZGVyZWRfc2V0IHRyZWU8bGwsIG51bGxfdHlwZSxsZXNzPGxsPiwgcmJfdHJlZV90YWcsdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPgp1c2luZyBuYW1lc3BhY2Ugc3RkOyAvLyBhc3NlcnQoYVtpXTxuICkgLy8gaWYgd2Ugd2FudCB0byBjaGVjayBmb3Igc3BlY2lhbCBjb25kICwgdXNlZCBmb3IgZGVidWcgICAgICAgICAgICAgICAgICAgICAKdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7IC8vIG1ha2UgbGVzc19lcXVhbCBpbiBvcmRlciB0byBtYWtlIGEgbXVsdGlzZXQgcGJkcwojZGVmaW5lIElORiAobGwpMWUxOCAKY29uc3QgbGwgTW9kID0gKGxsKTFlOSs3OwpsbCBDYXNlTj0xOwpjb25zdCBsZCBQSSA9IDIyLzcuMDsKCmxsIHRzdCgpCnsKbGwgYW5zPTA7CgpyZXR1cm4gYW5zOwp9Cgp2ZWN0b3I8dmVjdG9yPGxsPj4gZygxMDAyKTsKdmVjdG9yPGJvb2w+IHZpcygxMDAyLGZhbHNlKTsKbGwgbixtOwp2ZWN0b3I8bGw+IGQoMTAwMixMTE9OR19NQVgpOwpxdWV1ZTxsbD4gcTsKbGwgczsKLy9sbCBkaXM9MDsKCnZvaWQgYmZzKGxsIHNyYykKewoJCgl3aGlsZSghcS5lbXB0eSgpKQoJewoJLy9kaXMrKzsKCWxsIHAgPSBxLmZyb250KCk7CgkvL2NvdXQ8PHA8PCIrIjsKCXZpc1twXT10cnVlOwoJcS5wb3AoKTsKCWZvcihhdXRvIHg6IGdbcF0pCgl7CglpZih2aXNbeF09PWZhbHNlKQoJewoJCXEucHVzaCh4KTsJCgkJZFt4XT0gbWluKGRbeF0sZFtwXSsxKTsKCQkvL2RbeF09bWluKGRbeF0sZGlzKTsKCX0KCX0KCQkKCX0KCQpyZXR1cm47CQp9Cgp2b2lkIHNvbHZlKCkKewkJCgljaW4+Pm4+Pm07CgkvL3EuY2xlYXIoKTsKCWZvcihsbCBpPTE7aTw9bjtpKyspCgl7CgkJdmlzW2ldPWZhbHNlOwoJCWdbaV0uY2xlYXIoKTsKCQlkW2ldPUxMT05HX01BWDsKCX0JCgkKCWZvcihsbCBpPTA7aTxtO2krKykKCXsKCWxsIHUsdjsKCWNpbj4+dT4+djsKCWdbdV0ucHVzaF9iYWNrKHYpOwoJZ1t2XS5wdXNoX2JhY2sodSk7CQkKCX0KCgljaW4+PnM7CglxLnB1c2gocyk7CglkW3NdPTA7CgkKCS8vY291dDw8Ijo6Ijw8ZFszXTw8ZW5kbDsKCQoJYmZzKHMpOwoJCgkvL2NvdXQ8PGVuZGw7Cglmb3IobGwgaT0xO2k8PW47aSsrKQoJewoJaWYoaT09cykKCXsKCWNvbnRpbnVlOwkKCX0JCglpZihkW2ldPT1MTE9OR19NQVgpCgljb3V0PDwiLTEiPDwiICI7CQoJZWxzZQoJY291dDw8ZFtpXSo2PDwiICI7CQoJfQoJY291dDw8ZW5kbDsKCQoJCS8vY291dDw8IkNhc2UgIyI8PENhc2VOPDwiOiAiOwoJCUNhc2VOKys7CgkJLy8gcHJpbnQgeW91ciBhbnMgYmVsb3c7CgkKcmV0dXJuIDsKCn0KCgpzaWduZWQgbWFpbigpIHsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwoJY2luLnRpZShOVUxMKTsKCWxsIHQ9MTsKCWNpbj4+dDsKCXdoaWxlKHQtLSkKCXsKCXNvbHZlKCk7Cgl9CgkKfQ==