#include <bits/stdc++.h>
using namespace std;
long long int mod = 1000000007;
long long int INF = 1000000000000000000;
long long int powmod(long long int a, long long int b) {
  long long int res = 1;
  a %= mod;
  assert(b >= 0);
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}
long long int gcd(long long int a, long long int b) {
  return b ? gcd(b, a % b) : a;
}
const long long int MAXN = 100005;
void magic(int n, int *ar) {
  set<int> s;
  map<int, int> m;
  for (int i = 0; i < n; i++) s.insert(ar[i]);
  int size = 0;
  for (set<int>::iterator it = s.begin(); it != s.end(); it++) {
    m[*it] = size++;
  }
  for (int i = 0; i < n; i++) ar[i] = m[ar[i]];
}
bool present(string s, string r) {
  size_t found = s.find(r);
  if (found != string::npos) {
    return 1;
  }
  return 0;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int t = 1;
  while (t--) {
    int n, m = 0, flag = 1, mx = 0;
    string s;
    cin >> s;
    n = s.size();
    vector<int> g[26];
    for (int i = (0); i < (n); i++) {
      g[s[i] - 'a'].push_back(i);
    }
    for (int i = (0); i < (n - 1); i++) {
      s += s[i];
    }
    double cnt = 0;
    int pos = 1;
    for (int p = (0); p < (26); p++) {
      pos = 1;
      if (g[p].size() == 1)
        cnt++;
      else if (g[p].size()) {
        int mx = 0;
        while (pos < n) {
          map<pair<int, int>, int> mp;
          for (int i = (0); i < (g[p].size()); i++) {
            mp[make_pair(p, s[pos + g[p][i]] - 'a')]++;
          }
          int cnt = 0;
          for (auto i : mp) {
            if (i.second == 1) cnt++;
          }
          mx = max(mx, cnt);
          pos++;
        }
        cnt += mx;
      }
    }
    double ans = double(cnt) / double(n);
    cout << fixed << setprecision(15) << ans << endl;
  }
  return 0;
}
