#include<cstdio>#include<queue>#define maxn 1000005#define double long doubleusingnamespace std;struct node{int to, next, l;}e[maxn];int n, m, tot =0, index[maxn], head[maxn];double p[maxn], f[maxn];voidaddedge(int u,int v,int l){
e[++tot]=(node){v, head[u], l};
head[u]= tot;}
queue <int> q;voidTopo(){for(int i =1; i <= n; i++)if(!index[i]) q.push(i);while(q.size()){int now = q.front(); q.pop();for(int i = head[now]; i; i = e[i].next){
f[e[i].to]+=(f[now]+ e[i].l)/ p[e[i].to];if(!--index[e[i].to]) q.push(e[i].to);}}}intmain(){scanf("%d%d",&n,&m);for(int x, y, l, i =1; i <= m; i++){scanf("%d%d%d",&x,&y,&l);addedge(y, x, l); index[x]++; p[x]++;}Topo();printf("%.2llf\n", f[1]);return0;}