#include <bits/stdc++.h>
using namespace std;
vector<int> a[105];
void bfs(int s, double c[105], int d[105]) {
  int i, j, size;
  queue<int> q;
  for (i = 0; i < 105; i++) d[i] = -1;
  c[s] = 1;
  d[s] = 0;
  q.push(s);
  while (!q.empty()) {
    s = q.front();
    q.pop();
    for (i = 0; i < a[s].size(); i++) {
      if (d[a[s][i]] == -1 || d[a[s][i]] == d[s] + 1) {
        if (d[a[s][i]] == -1) {
          q.push(a[s][i]);
          d[a[s][i]] = d[s] + 1;
        }
        c[a[s][i]] += c[s];
      }
    }
  }
  return;
}
int main() {
  int i, j, u, v, w, s, e, n, p;
  double max1 = 1.0;
  double c[105];
  double x[105];
  int d1[105];
  int d2[105];
  for (i = 0; i < 105; i++) {
    c[i] = 0;
    x[i] = 0;
    d1[i] = -1;
    d2[i] = -1;
  }
  cin >> n;
  cin >> e;
  for (i = 1; i <= e; i++) {
    cin >> u >> v;
    a[u].push_back(v);
    a[v].push_back(u);
  }
  bfs(n, c, d1);
  bfs(1, x, d2);
  for (i = 2; i < n; i++) {
    if (c[i] > 0 && x[i] > 0 && d1[i] + d2[i] == d2[n])
      max1 = max(max1, ((c[i] * x[i] * 2.0) / x[n]));
  }
  printf("%.12lf\n", max1);
  return 0;
}
