#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define MOD 1000000007
#define PI 4 * atan(1)
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pii;
typedef vector<long long> vll;
typedef long int int32;
typedef unsigned long int uint32;
typedef long long int int64;
typedef unsigned long long int uint64;
int n,e,u;
vector<pii> adj[1004];
inline void solve(int test){
cin >> n >> e >> u;
int x,y,w;
for(int i=1; i<=n; i++) adj[i].clear();
for(int i=0; i<e; i++){
cin >> x >> y >> w;
adj[x].push_back({y,w});
adj[y].push_back({x, w});
}
int dist[n+1] = {0};
for(int i=1; i<=n; i++) dist[i] = INT_MAX;
dist[u] = 0;
priority_queue<pii> pq;
pq.push({0, u});
while(!pq.empty()){
pii f = pq.top(); pq.pop();
int node = f.second, d = f.first;
for(pii p: adj[node]){
int v = p.first;
int weight = p.second;
if(dist[v] > dist[node] + weight){
dist[v] = dist[node] + weight;
pq.push({dist[v], v});
}
}
}
for(int i=1; i<=n; i++) cout << dist[i] << " ";
cout << "\n";
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int typetest = 1;
if (typetest){
int t;
cin >> t;
for(int i=1; i<=t; i++){
solve(i);
}
}
else solve(0);
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgTU9EIDEwMDAwMDAwMDcKI2RlZmluZSBQSSA0ICogYXRhbigxKQp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKdHlwZWRlZiBwYWlyPGludCwgaW50PiBwaWk7CnR5cGVkZWYgdmVjdG9yPGxvbmcgbG9uZz4gdmxsOwp0eXBlZGVmIGxvbmcgaW50IGludDMyOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVpbnQzMjsKdHlwZWRlZiBsb25nIGxvbmcgaW50IGludDY0Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludDY0OwoKaW50IG4sZSx1Owp2ZWN0b3I8cGlpPiBhZGpbMTAwNF07CgoKaW5saW5lIHZvaWQgc29sdmUoaW50IHRlc3QpewogICAgY2luID4+IG4gPj4gZSA+PiB1OwogICAgaW50IHgseSx3OyAKICAgIGZvcihpbnQgaT0xOyBpPD1uOyBpKyspIGFkaltpXS5jbGVhcigpOwogICAgZm9yKGludCBpPTA7IGk8ZTsgaSsrKXsKICAgICAgICBjaW4gPj4geCA+PiB5ID4+IHc7CiAgICAgICAgYWRqW3hdLnB1c2hfYmFjayh7eSx3fSk7CiAgICAgICAgYWRqW3ldLnB1c2hfYmFjayh7eCwgd30pOwogICAgfQogICAgaW50IGRpc3RbbisxXSA9IHswfTsKICAgIGZvcihpbnQgaT0xOyBpPD1uOyBpKyspIGRpc3RbaV0gPSBJTlRfTUFYOwogICAgZGlzdFt1XSA9IDA7CiAgICBwcmlvcml0eV9xdWV1ZTxwaWk+IHBxOwogICAgcHEucHVzaCh7MCwgdX0pOwogICAgd2hpbGUoIXBxLmVtcHR5KCkpewogICAgICAgIHBpaSBmID0gcHEudG9wKCk7IHBxLnBvcCgpOwogICAgICAgIGludCBub2RlID0gZi5zZWNvbmQsIGQgPSBmLmZpcnN0OwogICAgICAgIGZvcihwaWkgcDogYWRqW25vZGVdKXsKICAgICAgICAgICAgaW50IHYgPSAgcC5maXJzdDsKICAgICAgICAgICAgaW50IHdlaWdodCA9IHAuc2Vjb25kOwogICAgICAgICAgICBpZihkaXN0W3ZdID4gZGlzdFtub2RlXSArIHdlaWdodCl7CiAgICAgICAgICAgICAgICBkaXN0W3ZdID0gZGlzdFtub2RlXSArIHdlaWdodDsKICAgICAgICAgICAgICAgIHBxLnB1c2goe2Rpc3Rbdl0sIHZ9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGZvcihpbnQgaT0xOyBpPD1uOyBpKyspIGNvdXQgPDwgZGlzdFtpXSA8PCAiICI7CiAgICBjb3V0IDw8ICJcbiI7Cgp9ICAgCgppbnQgbWFpbigpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgY291dC50aWUoTlVMTCk7CiAgICBpbnQgdHlwZXRlc3QgPSAxOwogICAgaWYgKHR5cGV0ZXN0KXsKICAgICAgICBpbnQgdDsKICAgICAgICBjaW4gPj4gdDsKICAgICAgICBmb3IoaW50IGk9MTsgaTw9dDsgaSsrKXsKICAgICAgICAgICAgc29sdmUoaSk7CiAgICAgICAgfQogICAgfQogICAgZWxzZSBzb2x2ZSgwKTsKfSA=