//
#include<bits/stdc++.h>
using namespace std;
//#define int long long
const int T=555;
const int N=111;
vector<int> v[N];
double dp[T+5][N+5]; // 经过 i 个单位时间后,处在位置 j 的概率为 dp[i][j]
void solve()
{
int n,m;
while( ~scanf("%d%d",&n,&m ) ) // 多组输入,保证绝大部分为小数据。
{
for( int i=1;i<=n;i++ ) v[i].clear();
memset( dp,0,sizeof( dp ) );
while( m-- )
{
int x,y;
scanf("%d%d",&x,&y );
v[x].push_back(y);
}
dp[0][1]=1; // 刚开始他站在位置1
for( int i=1;i<=T;i++ )
for( int j=1;j<=n;j++ )
{
dp[i][j]+=dp[i-1][j]/( v[j].size()+1 ); // 原地不动
for( auto k : v[j] ) dp[i][k]+=dp[i-1][j]/( v[j].size()+1 ); // 前往邻接点
}
double maxx=0;
for( int i=1;i<=n;i++ ) maxx=max( maxx,dp[T][i] );
printf("%.8lf\n",maxx );
}
}
signed main()
{
solve();
return 0;
}
/*
时间复杂度:O(T*N)
*/
作者 | 乐意奥AI