#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <functional>
#include <queue>
#include <set>
#include <cmath>
#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)
#define rep1(i,n) for(int i=1;i<=(int)(n);i++)

using namespace std;
typedef long long int lli;
const int INF=1e7;

int main(){
	int N,M;
	cin>>N>>M;
	int G[101][101];
	bool NS[101][101];
	rep1(i,N)rep1(j,N){
		G[i][j]=INF;
		NS[i][j]=false;
		}
	rep1(i,N)G[i][i]=0;
	rep1(i,M){
		int a,b,c;
		cin>>a>>b>>c;
		G[a][b]=c;
		G[b][a]=c;
	}
	int d[101][101];
	rep1(i,N)rep1(j,N)d[i][j]=G[i][j];
	rep1(k,N)rep1(i,N)rep1(j,N){
		if(d[i][j]>d[i][k]+d[k][j]){
			d[i][j]=d[i][k]+d[k][j];
			if(G[i][j]!=INF)NS[i][j]=true;
		}
	}
	int ans=0;
	rep1(i,N)rep1(j,N)if(NS[i][j])ans++;
	cout<<ans/2<<endl;
}