#include <bits/stdc++.h>   using namespace std;   int n, m;   int g[405][405];   vector<int> v[405];   double ans;   double gai[405];   double pos[405];   double suan(int yi, int juli) {     memset(gai, 0, sizeof(gai));     for (int i = 1; i <= n; i++) {       if (g[i][yi] == juli) {         for (int j = 0; j < (int)v[i].size(); j++) {           gai[v[i][j]] += 1.0 / n / (int)v[i].size();         }       }     }     vector<int> r;     r.clear();     for (int i = 1; i <= n; i++)       if (gai[i]) r.push_back(i);     double ret = 0;     for (int i = 1; i <= n; i++) {       double tmp = 0;       for (int j = 0; j < (int)r.size(); j++) {         pos[g[i][r[j]]] = max(pos[g[i][r[j]]], gai[r[j]]);       }       for (int j = 0; j < (int)r.size(); j++) {         tmp += pos[g[i][r[j]]];         pos[g[i][r[j]]] = 0;       }       ret = max(ret, tmp);     }     return ret;   }   int main() {     scanf( %d%d , &n, &m);     for (int i = 1; i <= n; i++) {       for (int j = 1; j <= n; j++)         if (i != j) g[i][j] = 199912310;     }     for (int i = 1; i <= m; i++) {       int x, y, z;       scanf( %d%d , &x, &y);       g[x][y] = 1;       g[y][x] = 1;       v[x].push_back(y);       v[y].push_back(x);     }     for (int k = 1; k <= n; k++) {       for (int i = 1; i <= n; i++) {         for (int j = 1; j <= n; j++)           g[i][j] = g[j][i] = min(g[i][j], g[i][k] + g[k][j]);       }     }     for (int i = 1; i <= n; i++) {       double now = 0;       for (int dist = 0; dist < n; dist++) {         int cnt = 0;         for (int j = 1; j <= n; j++) {           if (g[i][j] == dist) cnt++;         }         if (!cnt) continue;         double p = 1.0 / n;         double q = suan(i, dist);         now += max(p, q);       }       ans = max(ans, now);     }     printf( %.8lf n , ans);     return 0;   }   