#include <bits/stdc++.h>
#pragma warning(disable : 4996)
const int kMaxn = 5555;
int n, a[kMaxn], ok[kMaxn], cnt[55];
char str[kMaxn << 1], s[kMaxn][kMaxn];
bool cmp(int x, int y) { return strcmp(s[x], s[y]) < 0; }
int main() {
  static int i, j, k, last;
  static int ans, now, best;
  memset(str, 0, sizeof(str));
  memset(s, 0, sizeof(s));
  scanf(" %s", str);
  n = strlen(str);
  for (i = 0; i < n; ++i) str[i + n] = str[i];
  str[n << 1] = 0;
  for (i = 0; i < n; ++i) strncpy(s[i], str + i, n);
  for (i = 0; i < n; ++i) a[i] = i, ok[i] = 1;
  std::sort(a, a + n, cmp);
  for (i = 1; i < n; ++i)
    if (strcmp(s[a[i - 1]], s[a[i]]) == 0) ok[i - 1] = ok[i] = 0;
  ans = 0;
  last = 0;
  for (i = 1; i < n; ++i) {
    if (s[a[i]][0] != s[a[last]][0]) {
      best = 0;
      for (k = 1; k < n; ++k) {
        memset(cnt, 0, sizeof(cnt));
        for (j = last; j < i; ++j) cnt[s[a[j]][k] - 'a']++;
        now = 0;
        for (j = 0; j < 26; ++j)
          if (cnt[j] == 1) now++;
        best = std::max(best, now);
      }
      ans += best;
      last = i;
    }
  }
  best = 0;
  for (k = 1; k < n; ++k) {
    memset(cnt, 0, sizeof(cnt));
    for (j = last; j < n; ++j) cnt[s[a[j]][k] - 'a']++;
    now = 0;
    for (j = 0; j < 26; ++j)
      if (cnt[j] == 1) now++;
    best = std::max(best, now);
  }
  ans += best;
  printf("%.15f\n", (double)ans / n);
  return 0;
}
