#include <cstdio>
#define rep(i,j,k) for (int (i)=(j);(i)<=(k);++(i))
using namespace std;
typedef long double ld;
const int N=10,M=N*(N-1)/2,maxS=1<<N;
int n,m,all,cnt[maxS+10];
ld ans,fac[M+10],C[M+10][M+10],f[maxS+10][M+10],g[maxS+10][M+10];
int main(){
/*
* f[S][i]: status is S, the rank of the maximum edge of the graph is i
* f[S][i] = sigma(
g[T][j] * g[S - T][i - j - 1]
* C(i - 1, j)
* C(cnt[S] - i, cnt[T] - j)
* C((cnt[S] - i) - (cnt[T] - j), cnt[S - T] - (i - j - 1))
* (cnt[S] - cnt[T] - cnt[S - T])!
)
* g[S][i] = sigma(f[S][1 .. i])
*/
scanf("%d%d",&n,&m);
all=1<<n;
rep(i,1,m){
int x,y;
scanf("%d%d",&x,&y);
x--; y--;
rep(j,0,all-1) if ((j>>x&1) && (j>>y&1)) cnt[j]++;
}
rep(i,0,m) fac[i]=i?fac[i-1]*i:1;
rep(i,0,m) rep(j,0,i) C[i][j]=j?C[i-1][j-1]+C[i-1][j]:1;
rep(S,1,all-1) rep(i,0,cnt[S]){
if (S==(S&-S)){
f[S][i]=g[S][i]=1;
continue;
}
for (int S0=S-(S&-S),T=S0;T;T=T-1&S0) rep(j,0,i-1) if (j<=cnt[T] && i-j-1<=cnt[S-T]){
ld t=g[T][j]*g[S-T][i-j-1];
t*=C[i-1][j];
t*=C[cnt[S]-i][cnt[T]-j];
t*=C[cnt[S]-i-(cnt[T]-j)][cnt[S-T]-(i-j-1)];
t*=fac[cnt[S]-cnt[T]-cnt[S-T]];
f[S][i]+=t;
}
if (i) g[S][i]=g[S][i-1]+f[S][i];
}
rep(i,0,m) ans+=f[all-1][i]*i;
ans/=(m+1)*fac[m];
printf("%.6lf\n",(double)ans);
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KCiNkZWZpbmUgcmVwKGksaixrKSBmb3IgKGludCAoaSk9KGopOyhpKTw9KGspOysrKGkpKQoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBkb3VibGUgbGQ7Cgpjb25zdCBpbnQgTj0xMCxNPU4qKE4tMSkvMixtYXhTPTE8PE47CgppbnQgbixtLGFsbCxjbnRbbWF4UysxMF07CmxkIGFucyxmYWNbTSsxMF0sQ1tNKzEwXVtNKzEwXSxmW21heFMrMTBdW00rMTBdLGdbbWF4UysxMF1bTSsxMF07CgppbnQgbWFpbigpewoJLyoKCSAqIGZbU11baV06IHN0YXR1cyBpcyBTLCB0aGUgcmFuayBvZiB0aGUgbWF4aW11bSBlZGdlIG9mIHRoZSBncmFwaCBpcyBpCgkgKiBmW1NdW2ldID0gc2lnbWEoCgkJCQlnW1RdW2pdICogZ1tTIC0gVF1baSAtIGogLSAxXQoJCQkJKiBDKGkgLSAxLCBqKQoJCQkJKiBDKGNudFtTXSAtIGksIGNudFtUXSAtIGopCgkJCQkqIEMoKGNudFtTXSAtIGkpIC0gKGNudFtUXSAtIGopLCBjbnRbUyAtIFRdIC0gKGkgLSBqIC0gMSkpCgkJCQkqIChjbnRbU10gLSBjbnRbVF0gLSBjbnRbUyAtIFRdKSEKCQkJKQoJICogZ1tTXVtpXSA9IHNpZ21hKGZbU11bMSAuLiBpXSkKCSAqLwoJc2NhbmYoIiVkJWQiLCZuLCZtKTsKCWFsbD0xPDxuOwoJcmVwKGksMSxtKXsKCQlpbnQgeCx5OwoJCXNjYW5mKCIlZCVkIiwmeCwmeSk7CgkJeC0tOyB5LS07CgkJcmVwKGosMCxhbGwtMSkgaWYgKChqPj54JjEpICYmIChqPj55JjEpKSBjbnRbal0rKzsKCX0KCXJlcChpLDAsbSkgZmFjW2ldPWk/ZmFjW2ktMV0qaToxOwoJcmVwKGksMCxtKSByZXAoaiwwLGkpIENbaV1bal09aj9DW2ktMV1bai0xXStDW2ktMV1bal06MTsKCXJlcChTLDEsYWxsLTEpIHJlcChpLDAsY250W1NdKXsKCQlpZiAoUz09KFMmLVMpKXsKCQkJZltTXVtpXT1nW1NdW2ldPTE7CgkJCWNvbnRpbnVlOwoJCX0KCQlmb3IgKGludCBTMD1TLShTJi1TKSxUPVMwO1Q7VD1ULTEmUzApIHJlcChqLDAsaS0xKSBpZiAoajw9Y250W1RdICYmIGktai0xPD1jbnRbUy1UXSl7CgkJCWxkIHQ9Z1tUXVtqXSpnW1MtVF1baS1qLTFdOwoJCQl0Kj1DW2ktMV1bal07CgkJCXQqPUNbY250W1NdLWldW2NudFtUXS1qXTsKCQkJdCo9Q1tjbnRbU10taS0oY250W1RdLWopXVtjbnRbUy1UXS0oaS1qLTEpXTsKCQkJdCo9ZmFjW2NudFtTXS1jbnRbVF0tY250W1MtVF1dOwoJCQlmW1NdW2ldKz10OwoJCX0KCQlpZiAoaSkgZ1tTXVtpXT1nW1NdW2ktMV0rZltTXVtpXTsKCX0KCXJlcChpLDAsbSkgYW5zKz1mW2FsbC0xXVtpXSppOwoJYW5zLz0obSsxKSpmYWNbbV07CglwcmludGYoIiUuNmxmXG4iLChkb3VibGUpYW5zKTsKCXJldHVybiAwOwp9