/*
TASK:trade
LANG:C++
*/
#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> s[1001],p[1001];
float price[1001],sol[1001];
int m,n,a,b;
float getPrice(int v)
{
	if(v==0) return 1;
	float sum=0;
	for(int i=0;i<p[v].size();i++)
		sum+=getPrice(p[v][i]);
	sum/=p[v].size();
	if(s[v].size()!=0)
	{
		sum+=float(1)/float(s[v].size());
	}
	return sum;
}
int main()
{

	int i,cnt=0;
	cin>>n>>m;
	for(i=1;i<=m;i++)
	{
		cin>>a>>b;
		s[a].push_back(b);
		p[b].push_back(a);
	}

	for(i=1;i<=n;i++)
		if(s[i].size()==0)
		{
			sol[cnt]=getPrice(i);
			cnt++;
		}
	sort(sol,sol+cnt);
	printf("%6f\n",sol[0]);
	return 0;
}