#include <bits/stdc++.h>
using namespace std;
int n,m;
typedef pair<int,int> pii;
vector<pii>a[105];
double f[105],ans;
double c[305][305];
void Gauss(int m,int n)
{
int p=0;
for(int i=1;i<=n&&p<m;i++)
{
for(int j=p+1;j<=m;j++)
{
if(fabs(c[j][i])>1e-8)
{
swap(c[p+1],c[j]);
break;
}
}
if(fabs(c[p+1][i])<1e-8)
{
continue;
}
p++;
for(int j=1;j<=m;j++)
{
if(p!=j)
{
double rate=c[j][i]/c[p][i];
for(int k=1;k<=n+1;k++)
{
c[j][k]-=c[p][k]*rate;
}
}
}
}
for(int i=1;i<=n;i++)
{
f[i]=c[i][n+1]/c[i][i];
}
}
void solve(int j)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n+1;j++)
{
c[i][j]=0;
}
}
for(int i=1;i<n;i++)
{
double rate=1.0/a[i].size();
for(pii k:a[i])
{
int v=k.first;
int w=(k.second>>j)&1;
if(w==0)
{
c[i][v]-=rate;
}
else
{
c[i][v]+=rate;
c[i][n+1]+=rate;
}
}
c[i][i]++;
}
c[n][n]=1;
Gauss(n,n);
ans=ans+f[1]*(1<<j);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u,v,w;
cin>>u>>v>>w;
a[u].push_back(pii(v,w));
if(u!=v)
{
a[v].push_back(pii(u,w));
}
}
for(int j=0;j<30;j++)
{
solve(j);
}
cout<<fixed<<setprecision(3)<<ans<<endl;
return 0;
}