/* Jozef Tvarozek - CEOI */
#include <stdio.h>

#define MAXN 302
#define INF 999999999

// graf
int g[MAXN][MAXN];
int n;
// fw matica
int a[2][MAXN][MAXN];
int l[2][MAXN][MAXN];
double best;

void solve_positive(void)
{
  int i,j,k,w;
  double d = 0.0;
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
    {
      a[0][i][j] = g[i][j];
      if ( g[i][j] != INF )
        a[0][i][j] = -g[i][j];
      l[0][i][j] = 1;
    }
  w = 0;
  for (k = 0; k < n; k++,w=!w)
  {
    for (i = 0; i < n; i++)
      for (j = 0; j < n; j++)
      {
        a[!w][i][j] = a[w][i][j];
        l[!w][i][j] = l[w][i][j];
        if ( a[w][i][k] != INF && a[w][k][j] != INF )
          if ( a[!w][i][j] > a[w][i][k]+a[w][k][j] )
          {
            a[!w][i][j] = a[w][i][k]+a[w][k][j];
            l[!w][i][j] = l[w][i][k]+l[w][k][j];
          }
      }
    for (i = 0; i < n; i++)
      if ( a[!w][i][i] != INF )
      {
        d = (double)(a[!w][i][i])/(double)(l[!w][i][i]);
        if ( best < d )
         best = d;
      }
  }
}
void solve_negative(void)
{
  int i,j,k,w;
  double d = 0.0;
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
    {
      a[0][i][j] = g[i][j];
      l[0][i][j] = 1;
    }
  w = 0;
  for (k = 0; k < n; k++,w=!w)
  {
    for (i = 0; i < n; i++)
      for (j = 0; j < n; j++)
      {
        a[!w][i][j] = a[w][i][j];
        l[!w][i][j] = l[w][i][j];
        if ( a[w][i][k] != INF && a[w][k][j] != INF )
          if ( a[!w][i][j] > a[w][i][k]+a[w][k][j] )
          {
            a[!w][i][j] = a[w][i][k]+a[w][k][j];
            l[!w][i][j] = l[w][i][k]+l[w][k][j];
          }
      }
    for (i = 0; i < n; i++)
      if ( a[!w][i][i] != INF )
      {
        d = (double)(-a[!w][i][i])/(double)(l[!w][i][i]);
        if ( best < d )
         best = d;
      }
  }
}

int main(void)
{
  FILE *fin,*fout;
  int i,j,k,val,m,w;
  double d = 0.0;

  best = -1.0;
  fin = fopen("ceo.in","rt");
  fout = fopen("ceo.out","wt");

  fscanf(fin,"%d %d",&n,&m);
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
      g[i][j] = INF;
  for (i = 0; i < m; i++)
  {
    fscanf(fin,"%d %d %d",&j,&k,&val);
    g[j-1][k-1] = -val;
  }

  solve_negative();
  solve_positive();
  
  fprintf(fout,"%.3lf\n",best);
//  printf("%.3lf\n",best);
  return 0;
}
