#include <bits/stdc++.h>
#define fi first
#define se second
#define maxn 300005
#define sti string
#define int long long
using namespace std;
int val[maxn],Rank[maxn],test;
vector<pair<int,int>> adj[maxn];
bool vis[maxn];
const int mod = 998244353;
struct node {
int idx,w,v,u;
};
signed main()
{
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>test;
while(test--){
int n,m,k;
cin>>n>>m>>k;
for(int i=1;i<=n;i++) {
adj[i].clear();
vis[i] = 0;
Rank[i] = 0;
val[i] = 0;
}
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
adj[u].push_back({v,w});
adj[v].push_back({u,w});
}
vector<int> cur;
cur.push_back(1);
vis[1] = 1;
for(int u : cur){
for(auto [v,w] : adj[u]){
if(w == 0 && !vis[v]){
vis[v] = 1;
cur.push_back(v);
}
}
}
while(!cur.empty()){
vector<node> vec;
for(int u : cur){
for(auto [v,w] : adj[u]){
if(!vis[v]){
vec.push_back({Rank[u],w,v,u});
}
}
}
sort(vec.begin(), vec.end(), [](const node& a, const node& b) {
if (a.idx != b.idx) return a.idx < b.idx;
return a.w < b.w;
});
vector<int> nxt;
int curidx = -1;
int lastidx = -1,lastW = -1;
for(auto [idx,w,v,u] : vec){
if(vis[v]) continue;
if(idx != lastidx || w != lastW){
curidx++;
lastidx = idx;
lastW = w;
}
vis[v] = 1;
Rank[v] = curidx;
val[v] = ((val[u] * k % mod) + w)%mod;
nxt.push_back(v);
}
cur = nxt;
}
for(int i=1;i<=n;i++) {
if(!vis[i]) cout<<-1<<' ';
else cout<<val[i]<<' ';
}
cout<<'\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBtYXhuIDMwMDAwNQojZGVmaW5lIHN0aSBzdHJpbmcKI2RlZmluZSBpbnQgbG9uZyBsb25nCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IHZhbFttYXhuXSxSYW5rW21heG5dLHRlc3Q7CnZlY3RvcjxwYWlyPGludCxpbnQ+PiBhZGpbbWF4bl07CmJvb2wgdmlzW21heG5dOwpjb25zdCBpbnQgbW9kID0gOTk4MjQ0MzUzOwoKc3RydWN0IG5vZGUgewogIGludCBpZHgsdyx2LHU7Cn07CgpzaWduZWQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKICAgIGNpbj4+dGVzdDsKICAgIHdoaWxlKHRlc3QtLSl7CiAgICAgICAgaW50IG4sbSxrOwogICAgICAgIGNpbj4+bj4+bT4+azsKICAgICAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgewogICAgICAgICAgICBhZGpbaV0uY2xlYXIoKTsKICAgICAgICAgICAgdmlzW2ldID0gMDsKICAgICAgICAgICAgUmFua1tpXSA9IDA7CiAgICAgICAgICAgIHZhbFtpXSA9IDA7CiAgICAgICAgfQogICAgICAgIGZvcihpbnQgaT0xO2k8PW07aSsrKXsKICAgICAgICAgICAgaW50IHUsdix3OwogICAgICAgICAgICBjaW4+PnU+PnY+Pnc7CiAgICAgICAgICAgIGFkalt1XS5wdXNoX2JhY2soe3Ysd30pOwogICAgICAgICAgICBhZGpbdl0ucHVzaF9iYWNrKHt1LHd9KTsKICAgICAgICB9CiAgICAgICAgdmVjdG9yPGludD4gY3VyOwogICAgICAgIGN1ci5wdXNoX2JhY2soMSk7CiAgICAgICAgdmlzWzFdID0gMTsKICAgICAgICBmb3IoaW50IHUgOiBjdXIpewogICAgICAgICAgICBmb3IoYXV0byBbdix3XSA6IGFkalt1XSl7CiAgICAgICAgICAgICAgICBpZih3ID09IDAgJiYgIXZpc1t2XSl7CiAgICAgICAgICAgICAgICAgICAgdmlzW3ZdID0gMTsKICAgICAgICAgICAgICAgICAgICBjdXIucHVzaF9iYWNrKHYpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHdoaWxlKCFjdXIuZW1wdHkoKSl7CiAgICAgICAgICAgIHZlY3Rvcjxub2RlPiB2ZWM7CiAgICAgICAgICAgIGZvcihpbnQgdSA6IGN1cil7CiAgICAgICAgICAgICAgICBmb3IoYXV0byBbdix3XSA6IGFkalt1XSl7CiAgICAgICAgICAgICAgICAgICAgaWYoIXZpc1t2XSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHZlYy5wdXNoX2JhY2soe1JhbmtbdV0sdyx2LHV9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc29ydCh2ZWMuYmVnaW4oKSwgdmVjLmVuZCgpLCBbXShjb25zdCBub2RlJiBhLCBjb25zdCBub2RlJiBiKSB7CiAgICAgICAgICAgICAgICBpZiAoYS5pZHggIT0gYi5pZHgpIHJldHVybiBhLmlkeCA8IGIuaWR4OwogICAgICAgICAgICAgICAgcmV0dXJuIGEudyA8IGIudzsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHZlY3RvcjxpbnQ+IG54dDsKICAgICAgICAgICAgaW50IGN1cmlkeCA9IC0xOwogICAgICAgICAgICBpbnQgbGFzdGlkeCA9IC0xLGxhc3RXID0gLTE7CiAgICAgICAgICAgIGZvcihhdXRvIFtpZHgsdyx2LHVdIDogdmVjKXsKICAgICAgICAgICAgICAgIGlmKHZpc1t2XSkgY29udGludWU7CiAgICAgICAgICAgICAgICBpZihpZHggIT0gbGFzdGlkeCB8fCB3ICE9IGxhc3RXKXsKICAgICAgICAgICAgICAgICAgICBjdXJpZHgrKzsKICAgICAgICAgICAgICAgICAgICBsYXN0aWR4ID0gaWR4OwogICAgICAgICAgICAgICAgICAgIGxhc3RXID0gdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZpc1t2XSA9IDE7CiAgICAgICAgICAgICAgICBSYW5rW3ZdID0gY3VyaWR4OwogICAgICAgICAgICAgICAgdmFsW3ZdID0gKCh2YWxbdV0gKiBrICUgbW9kKSArIHcpJW1vZDsKICAgICAgICAgICAgICAgIG54dC5wdXNoX2JhY2sodik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3VyID0gbnh0OwogICAgICAgIH0KICAgICAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgewogICAgICAgICAgICBpZighdmlzW2ldKSBjb3V0PDwtMTw8JyAnOwogICAgICAgICAgICBlbHNlIGNvdXQ8PHZhbFtpXTw8JyAnOwogICAgICAgIH0KICAgICAgICBjb3V0PDwnXG4nOwogICAgfQogICAgcmV0dXJuIDA7Cn0K