#include <bits/stdc++.h>
using namespace std;
int N, M;
int ab[110][110] = {};
int no_need[110][110] = {};
int dik(int k) {
  int now = k;
  int dis[110] = {};
  int det[110] = {};
  int prev[110][110] = {};
  for (int i = 0; i < N + 1; i++) {
    dis[i] = 10000;
  }
  dis[k] = 0;
  det[k] = 1;
  for (int l = 1; l < N; l++) {
    for (int i = 1; i < N + 1; i++) {
      if (det[i] == 0 && ab[now][i] != 0) {
        if (dis[now] + ab[now][i] < dis[i]) {
          dis[i] = dis[now] + ab[now][i];
          for (int j = 1; j < N + 1; j++) {
            prev[i][j] = 0;
          }
          prev[i][now] = 1;
        }
        if (dis[now] + ab[now][i] == dis[i]) {
          prev[i][now] = 1;
        }
      }
    }
    now = 0;
    for (int i = 1; i < N + 1; i++) {
      if (det[i] == 0) {
        if (dis[i] < dis[now]) now = i;
      }
    }
    det[now] = 1;
    for (int i = 1; i < N + 1; i++) {
      if (prev[now][i] == 1) {
        no_need[now][i] = 0;
        no_need[i][now] = 0;
      }
    }
  }
  return 0;
}
int solve() {
  int ans = 0;
  for (int i = 1; i < N + 1; i++) {
    dik(i);
  }
  for (int i = 1; i < N + 1; i++) {
    for (int j = i + 1; j < N + 1; j++) {
      if (no_need[i][j] == 1) ans++;
    }
  }
  cout << ans << endl;
  return 0;
}
int main() {
  int a, b, c;
  cin >> N >> M;
  for (int i = 0; i < M; i++) {
    cin >> a >> b >> c;
    ab[a][b] = c;
    ab[b][a] = c;
    no_need[a][b] = 1;
  }
  solve();
  return 0;
}
