#include<stdio.h>
#include<vector>
#define inf 2000000000
using namespace std;
FILE *f=fopen("ciclu.in","r");
FILE *g=fopen("ciclu.out","w");
int d[1001],N,M,init[1001][1001],x,y,z,m,c[10000001],cu,cp,nr[1001],s[1001],ok,sol,maxN;
vector <int> a[1001];
void citire(){
fscanf(f,"%d%d",&N,&M);
for(int i=1;i<=M;i++){
fscanf(f,"%d%d%d",&x,&y,&z),init[x][y]=z*100,a[x].push_back(y);
if(init[x][y] > maxN)
maxN=init[x][y];
}
for(int i=1;i<=N;i++)
a[0].push_back(i);
}
void initi(){
for(int i=1;i<=N;i++)
d[i]=inf,nr[i]=0,s[i]=0;
cp=1,cu=1,ok=1,c[1]=0;
}
void bell()
{ while(cp<=cu)
{ int nrc=c[cp];
int cate=a[nrc].size();
for(int j=0;j<cate;j++)
{ int i=a[nrc][j];
int what=init[nrc][i]-m;
if( d[nrc] + what <= d[i] )
{ d[i]=d[nrc]+what,nr[i]++;
if(nr[i]>=N)
{ ok=0;return;}
if(s[i]==0)
c[++cu]=i,s[i]=1;
}
}
cp++,s[nrc]=0;
}
}
void cautare(){
int p=0,u=maxN;
while(p<=u){
m=(p+u)/2,initi(),bell();
if(!ok)
sol=m,u=m-1;
else p=m+1;
}
}
void afis(){
float x=sol/float(100);
fprintf(g,"%.2f",x);
}
int main(){
citire();
cautare();
afis();
return 0;
}