/*
TASK:trade
LANG:C++
*/
#include<iostream.h>
#include<stdio.h>
int n,m;
int a[1001][1001];
double a1[1000];
int b[1000];
void read()
{
	std::cin>>n>>m;
	for(int i=0;i<=m-1;i++)
	{
		int d,l;
		std::cin>>d>>l;
		a[d][l]=1;
	}
}
void find()
{
	int f=0;
	for(int i=1;i<=n;i++)
	{
		f=0;
		for(int j=0;j<=n;j++)
			if(a[i][j]==1)
			{
				f=1;
				break;
			}
		if(f==0)
			b[i]=1;
	}
}
double solve(int q)
{
	if(a1[q]!=0)
		return a1[q];
	double x=0;
	int br=0;
	for(int h=0;h<=n;h++)
		if(a[h][q]==1)
		{
			x+=solve(h);
			br++;
		}
	x/=br;
	double k=0;
	for(int i=0;i<=n;i++)
		if(a[q][i]==1)
			k++;
	if(k==0)
		a1[q]=x;
	else
		a1[q]=x+1/k;
	return a1[q];
}
int main()
{
	read();
	a1[0]=1;
	find();
	for(int i=1;i<=n;i++)
		solve(i);
	double min=1000;
	for(int g=0;g<=n;g++)
		if(b[g]==1 && a1[g]<min)
			min=a1[g];
	printf("%f",min);
	return 0;
}