#include <bits/stdc++.h>
using namespace std;
struct edge {
  int to, cost;
};
vector<edge> G[200];
int V, E;
long long d[200 + 1];
bool bellmanford(int s) {
  fill(d, d + 200, 1e10);
  d[s] = 0;
  int c = 0;
  bool upd = false;
  while (true) {
    upd = false;
    for (int i = 0; i < V; i++) {
      for (int j = 0; j < G[i].size(); j++) {
        edge e = G[i][j];
        if (d[i] != 1e10 && d[e.to] > d[i] + e.cost) {
          d[e.to] = d[i] + e.cost;
          upd = true;
        }
      }
    }
    if (!upd) break;
    if (c == V - 1) return true;
    c++;
  }
  return false;
}
int main() {
  d[200] = 1e10 + 10;
  int first;
  bool flag;
  cin >> V >> E;
  for (int i = 0; i < E; i++) {
    int f, t;
    edge e;
    cin >> f >> e.to >> e.cost;
    G[f].push_back(e);
    t = e.to;
    e.to = f;
    G[t].push_back(e);
  }
  long long vec[V][V];
  long long sum = 0;
  for (int i = 0; i < V; i++) {
    for (int j = i + 1; j < V; j++) {
      for (int k = 0; k < G[i].size(); k++) {
        long long res = vec[i][G[i][k].to] + vec[G[i][k].to][j];
        if (res != vec[i][j]) sum++;
      }
    }
  }
  cout << sum - 1 << endl;
}
