#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T &x) {
  char c;
  x = 0;
  int fu = 1;
  c = getchar();
  while (c > 57 || c < 48) {
    if (c == 45) {
      fu = -1;
    }
    c = getchar();
  }
  while (c <= 57 && c >= 48) {
    x = (x << 3) + (x << 1) + c - 48;
    c = getchar();
  }
  x *= fu;
}
template <typename T>
inline void fprint(T x) {
  if (x < 0) {
    putchar(45);
    x = -x;
  }
  if (x > 9) {
    fprint(x / 10);
  }
  putchar(x % 10 + 48);
}
int len;
string a;
vector<int> pos[26];
long double base[26], ans;
int calc(int x, int d) {
  int ret = 0;
  int b[26];
  memset(b, 0, sizeof(b));
  for (register int i = 0; i < pos[x].size(); i++) {
    int cur = a[pos[x][i] + d] - 'a';
    b[cur]++;
  }
  for (register int i = 0; i < 26; i++) ret += (b[i] == 1);
  return ret;
}
void work(int x) {
  int cnt = -1;
  for (register int i = 1; i < len; i++) {
    cnt = max(cnt, calc(x, i));
  }
  long double tmp1 = cnt * 1.0, tmp2 = (long double)pos[x].size() * 1.0;
  ans = ans + ((tmp1 / tmp2) * base[x]);
}
int main() {
  cin >> a;
  len = a.size();
  if (a[len - 1] == '\n') {
    len--;
    a[len] = '\0';
  }
  for (register int i = 0; i < len; i++) {
    pos[a[i] - 'a'].push_back(i);
    base[a[i] - 'a']++;
  }
  for (register int i = 0; i < 26; i++)
    base[i] = base[i] / (long double)(len * 1.0);
  a = a + a;
  for (register int i = 0; i < 26; i++) {
    if (base[i] != 0.0) work(i);
  }
  double FrameTQL = ans;
  printf("%.12lf\n", FrameTQL);
}
