#include <bits/stdc++.h>
using namespace std;
template <class T>
void dbg(const char* xn, T x) {
  if (0) cout << xn << ": " << x << "\n";
}
template <class T, class... TA>
void dbg(const char* xn, T x, TA... t) {
  while (*xn != ',')
    if (0) cout << *xn++;
  if (0) cout << ": " << x << ",";
  dbg(xn + 1, t...);
}
template <class T>
inline bool upd_max(T& x, T y) {
  return y > x ? x = y, true : false;
}
template <class T>
inline bool upd_min(T& x, T y) {
  return y < x ? x = y, true : false;
}
const int N = 1000007;
const int A = 26;
long long n, cnt[A + 7], rst = 0;
string S;
vector<long long> occ[A + 7];
long long probability(long long ltr) {
  if (0) cout << '\n';
  if (0) cout << '\n';
  if (0)
    if (0) cout << '\n';
  long long good = 0;
  for (long long i = 1; i <= n - 1; ++i) {
    for (long long l = 0; l < 26; ++l) cnt[l] = 0;
    for (auto x : occ[ltr]) ++cnt[S[(x + i) % n] - 'a'];
    long long uni = 0;
    for (long long l = 0; l < 26; ++l)
      if (cnt[l] == 1) ++uni;
    upd_max(good, uni);
  }
  return good;
}
void solve() {
  cin >> S;
  n = ((long long)(S).size());
  for (long long i = 0; i < (n); ++i) occ[S[i] - 'a'].push_back(i);
  for (long long ltr = 0; ltr < A; ++ltr) {
    if (occ[ltr].empty()) continue;
    long long prob = probability(ltr);
    rst += prob;
  }
  cout << (long double)rst / n;
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout << fixed << setprecision(10);
  solve();
  return 0;
}
