/*
Author: NgThi Thao Duyen
Link submit:
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define task "paths"
#define fi first
#define se second
#define pii pair<int,int>
#define pb push_back
#define dou double
#define el '\n'
#define ull unsigned long long
const int maxN = 1e6;
const int maxM = 500;
const int LIM = 1e9;
const ll oo = 1e18;
const int mod = (int)1e9+7;
const int LOG = 23;
struct edge{
int u, v;
int w;
};
int T;
int n, m;
edge a[(maxM*maxM)/2+5];
int dis[maxM+5][maxM+5];
int sum[maxM+5][maxM+5];
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
if(fopen(task".inp","r"))
{
freopen(task".inp","r",stdin);
freopen(task".out","w",stdout);
}
cin >> T;
cin >> n >> m;
memset(dis, 0x3f, sizeof dis);
for (int i=0;i<=n;i++) dis[i][i] = 0;
for(int i=1; i<=m; i++)
{
int u,v,w; cin >> u >> v >> w;
a[i].u = u;
a[i].v = v;
a[i].w = w;
dis[u][v] = min(dis[u][v],w);
dis[v][u] = min(dis[v][u],w);
}
for(int k=1; k<=n; k++)
{
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
}
}
for(int s=1; s<=n; s++)
{
for(int i=1; i<=m; i++)
{
int u = a[i].u, v = a[i].v;
int w = a[i].w;
if(dis[s][u] + w == dis[s][v])sum[s][v]++;
if(dis[s][v] + w == dis[s][u])sum[s][u]++;
}
}
for(int s=1; s<n; s++)
{
for(int t=s+1; t<=n; t++)
{
ll ans = 0;
for(int u=1; u<=n; u++)
{
if(dis[s][u] + dis[u][t] == dis[s][t]) ans+= sum[s][u];
}
cout<<ans<<" ";
}
cout<<el;
}
return 0;
}
LyoKICAgIEF1dGhvcjogTmdUaGkgVGhhbyBEdXllbgogICAgTGluayBzdWJtaXQ6IAoqLwoKI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBsbCBsb25nIGxvbmcgCiNkZWZpbmUgdGFzayAicGF0aHMiCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBwaWkgcGFpcjxpbnQsaW50PgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGRvdSBkb3VibGUKI2RlZmluZSBlbCAnXG4nCiNkZWZpbmUgdWxsIHVuc2lnbmVkIGxvbmcgbG9uZyAKY29uc3QgaW50IG1heE4gPSAxZTY7CmNvbnN0IGludCBtYXhNID0gNTAwOwpjb25zdCBpbnQgTElNID0gMWU5Owpjb25zdCBsbCBvbyA9IDFlMTg7CmNvbnN0IGludCBtb2QgPSAoaW50KTFlOSs3Owpjb25zdCBpbnQgTE9HID0gMjM7CnN0cnVjdCBlZGdlewogICAgaW50IHUsIHY7CiAgICBpbnQgdzsKfTsKCmludCBUOwppbnQgbiwgbTsKZWRnZSBhWyhtYXhNKm1heE0pLzIrNV07CmludCBkaXNbbWF4TSs1XVttYXhNKzVdOwppbnQgc3VtW21heE0rNV1bbWF4TSs1XTsKCmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsKICAgIGlmKGZvcGVuKHRhc2siLmlucCIsInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKHRhc2siLmlucCIsInIiLHN0ZGluKTsKICAgICAgICBmcmVvcGVuKHRhc2siLm91dCIsInciLHN0ZG91dCk7CiAgICB9CiAgICAKICAgIGNpbiA+PiBUOwogICAgY2luID4+IG4gPj4gbTsKICAgIG1lbXNldChkaXMsIDB4M2YsIHNpemVvZiBkaXMpOwogICAgZm9yIChpbnQgaT0wO2k8PW47aSsrKSBkaXNbaV1baV0gPSAwOwogICAgZm9yKGludCBpPTE7IGk8PW07IGkrKykKICAgIHsKICAgICAgICBpbnQgdSx2LHc7IGNpbiA+PiB1ID4+IHYgPj4gdzsKICAgICAgICBhW2ldLnUgPSB1OwogICAgICAgIGFbaV0udiA9IHY7CiAgICAgICAgYVtpXS53ID0gdzsKICAgICAgICBkaXNbdV1bdl0gPSBtaW4oZGlzW3VdW3ZdLHcpOwogICAgICAgIGRpc1t2XVt1XSA9IG1pbihkaXNbdl1bdV0sdyk7CiAgICB9CiAgICAKICAgIGZvcihpbnQgaz0xOyBrPD1uOyBrKyspCiAgICB7CiAgICAgICAgZm9yKGludCBpPTE7IGk8PW47IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGZvcihpbnQgaj0xOyBqPD1uOyBqKyspZGlzW2ldW2pdICA9IG1pbihkaXNbaV1bal0sIGRpc1tpXVtrXSArIGRpc1trXVtqXSk7CiAgICAgICAgfQogICAgfQogICAgCiAgICBmb3IoaW50IHM9MTsgczw9bjsgcysrKQogICAgewogICAgICAgIGZvcihpbnQgaT0xOyBpPD1tOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgdSA9IGFbaV0udSwgdiA9IGFbaV0udjsKICAgICAgICAgICAgaW50IHcgPSBhW2ldLnc7CiAgICAgICAgICAgIGlmKGRpc1tzXVt1XSArIHcgPT0gZGlzW3NdW3ZdKXN1bVtzXVt2XSsrOwogICAgICAgICAgICBpZihkaXNbc11bdl0gKyB3ID09IGRpc1tzXVt1XSlzdW1bc11bdV0rKzsgCiAgICAgICAgfQogICAgfQogICAgZm9yKGludCBzPTE7IHM8bjsgcysrKQogICAgewogICAgICAgIGZvcihpbnQgdD1zKzE7IHQ8PW47IHQrKykKICAgICAgICB7CiAgICAgICAgICAgIGxsIGFucyA9IDA7CiAgICAgICAgICAgIGZvcihpbnQgdT0xOyB1PD1uOyB1KyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKGRpc1tzXVt1XSArIGRpc1t1XVt0XSA9PSBkaXNbc11bdF0pIGFucys9IHN1bVtzXVt1XTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb3V0PDxhbnM8PCIgIjsKICAgICAgICB9CiAgICAgICAgY291dDw8ZWw7CiAgICB9CiAgICByZXR1cm4gMDsKfQoK