#include <bits/stdc++.h>
using namespace std;
long long int dp[700][700];
long long int paths[700][700];
long long int ans[700][700];
long long int G[700][700];
int main() {
  int n, m, x, y, l;
  scanf("%d%d", &n, &m);
  for (int(i) = 0; (i) < (n); (i)++) {
    for (int(j) = 0; (j) < (n); (j)++) {
      G[i][j] = 2147483647;
      ans[i][j] = 0;
      paths[i][j] = 0;
    }
    G[i][i] = 0;
  }
  for (int(i) = 0; (i) < (m); (i)++) {
    scanf("%d%d%d", &x, &y, &l);
    x--, y--;
    G[y][x] = l;
    G[x][y] = l;
  }
  for (int(i) = 0; (i) < (n); (i)++)
    for (int(j) = 0; (j) < (n); (j)++) dp[i][j] = G[i][j];
  for (int(k) = 0; (k) < (n); (k)++)
    for (int(i) = 0; (i) < (n); (i)++)
      for (int(j) = (i + 1); (j) <= (n - 1); (j)++) {
        dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j]);
        dp[j][i] = dp[i][j];
      }
  for (int(i) = 0; (i) < (n); (i)++)
    for (int(j) = 0; (j) < (n); (j)++) {
      if (dp[i][j] != 2147483647 && dp[i][j] != 0) {
        for (int(k) = 0; (k) < (n); (k)++)
          if (j != k && dp[i][j] == dp[i][k] + G[k][j]) paths[i][j]++;
      }
    }
  for (int(i) = 0; (i) < (n); (i)++)
    for (int(j) = (i + 1); (j) <= (n - 1); (j)++) {
      if (dp[i][j] != 2147483647) {
        for (int(k) = 0; (k) < (n); (k)++)
          if (dp[i][j] == dp[i][k] + dp[k][j]) ans[i][j] += paths[i][k];
      }
    }
  for (int(i) = 0; (i) < (n); (i)++)
    for (int(j) = (i + 1); (j) <= (n - 1); (j)++) {
      printf("%lld ", ans[i][j]);
    }
  cout << "\n";
  return 0;
}
