#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define INF 0x3f3f3f3f typedef long long LL; const int maxn = 110; int g[maxn][maxn]; LL path[maxn][maxn]; int n, m; int main() { memset(g, 0x3f, sizeof(g)); scanf("%d%d", &n, &m); int u, v, w; for(int i = 1; i <= m; i ++) { scanf("%d%d%d", &u, &v, &w); g[u][v] = w; g[v][u] = w; path[u][v] = path[v][u] = 1; } for(int k = 1; k <= n; k ++) { for(int i = 1; i <= n; i ++) { for(int j = 1; j <= n; j ++) { if(i == j || i == k || j == k) continue; if(g[i][k] + g[k][j] <= g[i][j]) { if(g[i][k] + g[k][j] < g[i][j]) path[i][j] = 0; g[i][j] = g[i][k] + g[k][j]; path[i][j] += path[i][k] * path[k][j]; } } } } for(int k = 1; k <= n; k ++) { double ans = 0; for(int i = 1; i <= n; i ++) { for(int j = 1; j <= n; j ++) { if(i == j || i == k || k == j) continue; if(g[i][k] + g[k][j] == g[i][j]) ans += (double)(path[i][k] * path[k][j]) / (double)path[i][j]; } } printf("%.3lf\n", ans); } return 0; }