fabbbhgedd
 abbbaababbbaababbbaababbbaababbbaababbbaababbbaababbbaababbbaababbbaababbbaababbbaababbbaab
 hcdhgcchbdhbeagdcfedgcbaffebgcbcccadeefacbhefgeadfgchabgeebegahfgegahbddedfhffeadcedadgfbeebhgfahhfb
 khjcoijiicdkdianmdolmadobdkcmgifdnffddnjehhbldlkjffknficdcmokfacioiegjedbmadjioomdacbodcajcmonmnlabo
 bababbdaee
 cbbbbcaaca
 gaejllebhn
 eaaebccaeacdecaedcaabbbdeebccdcdaabeeaeeaddbaabdccebecebbbbedbdcbbbbbbecbaddcddcccdcbbadbecddecedbba
 difhjdjbcdjedhiegagdejkbjfcdcdagdijdjajecbheiabfbjdgjdecfhdkgdbkcgcgakkiiggfkgcfadkjhiijkjacgejfhjge
 bbababaaababaabbbbbabbbbbbaaabbabaaaaabbbbbaaaabbbbabaabaabababbbabbabbabaaababbabbababaaaaabaaaabbb
 cadbcdddda
 kpsaloedscghjeaqadfhmlibjepjafdomkkorinrpakondtnrnknbqarbejcenrlsbfgdbsdmkpphbkdnbitjfcofsjibssmmlll
 aaabbbaaaabbbbaaabbbbbaabbbbaaababbaaabbbbaaabbbbababbbbaaabbbbaaabbbbbaabbbbaaabbbbaaabbbb
 ibledofnibedebifmnjdoaijeghajecbkjaebbkofnacceaodiifbhgkihkibddneeiemacodeafeaiiiaoajhmkjffbmmiehebhokfklhbkeoanoajdedjdlkbhenidclagggfhhhldfleccgmjbkhaginlhabkabagikalccndciokabfaebjkndf
 abbacba
 jkeaagakbifeaechkifkdghcjcgighidcgdccfbdbcackfgaebkddabgijkhjkaffkabacekdkjekeccegbecbkecbgbgcacgdackcdfjefaifgbigahkbedidfhjbikejdhejcgideaeejdcegeeccaefbddejkbdkfagfcdjbikbidfggkidcdcic

1.000000000000000
 0.000000000000000
 0.450000000000000
 0.960000000000000
 1.000000000000000
 0.800000000000000
 1.000000000000000
 0.080000000000000
 0.840000000000000
 0.000000000000000
 0.800000000000000
 1.000000000000000
 0.000000000000000
 0.786096256684492
 1.000000000000000
 0.438502673796791

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

/*
 public class _931E {

 }

 */
public class _931E {
  public void solve() throws FileNotFoundException {
    InputStream inputStream = System.in;

    InputHelper in = new InputHelper(inputStream);

    // actual solution
    String s = in.read();

    int n = s.length();

    int[][][] pre = new int[26][n + 1][26];

    int[] cc = new int[26];

    for (int i = 0; i < n; i++) {
      cc[s.charAt(i) - 'a']++;
      for (int j = i + 1; j < n; j++) {
        pre[s.charAt(i) - 'a'][j - i][s.charAt(j) - 'a']++;
      }
      for (int j = 0; j < i; j++) {
        pre[s.charAt(i) - 'a'][n - i + j][s.charAt(j) - 'a']++;
      }
    }

    double[][] prob = new double[26][n + 1];
    double[] max = new double[26];

    for (int i = 0; i < 26; i++) {
      for (int j = 1; j < n; j++) {
        for (int k = 0; k < 26; k++) {
          if (pre[i][j][k] == 1) {
            prob[i][j] += 1.0 / cc[i];
          }
        }
        if (prob[i][j] > max[i]) {
          max[i] = prob[i][j];
        }
      }
    }

    double ans = 0;
    for (int i = 0; i < 26; i++) {
      ans += cc[i] * max[i];
    }

    System.out.println(ans / n);
    // double ans = 0;
    //
    // int[] min = new int[26];
    // int[] minc = new int[26];
    // int[] cc = new int[26];
    //
    // for (int i = 0; i < 26; i++) {
    // min[i] = n + 1;
    // }
    //
    // for (int i = 0; i < n; i++) {
    // int ic = s.charAt(i) - 'a';
    // cc[ic]++;
    // int cmin = n + 1;
    // for (int j = i + 1; j < n; j++) {
    // int jc = s.charAt(j) - 'a';
    // cmin = Math.min(pre[ic][jc][j - i], cmin);
    // }
    // for (int j = 0; j < i; j++) {
    // int jc = s.charAt(j) - 'a';
    // cmin = Math.min(pre[ic][jc][n - i + j], cmin);
    // }
    //
    // if (cmin < min[ic]) {
    // min[ic] = cmin;
    // minc[ic] = 1;
    // } else if (cmin == min[ic]) {
    // minc[ic]++;
    // }
    // }
    //
    // for (int i = 0; i < 26; i++) {
    // ans += (double) minc[i] / (26.0 * min[i]);
    // }
    // System.out.println(ans);
    // end here
  }

  public static void main(String[] args) throws FileNotFoundException {
    (new _931E()).solve();
  }

  class InputHelper {
    StringTokenizer tokenizer = null;
    private BufferedReader bufferedReader;

    public InputHelper(InputStream inputStream) {
      InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
      bufferedReader = new BufferedReader(inputStreamReader, 16384);
    }

    public String read() {
      while (tokenizer == null || !tokenizer.hasMoreTokens()) {
        try {
          String line = bufferedReader.readLine();
          if (line == null) {
            return null;
          }
          tokenizer = new StringTokenizer(line);
        } catch (IOException e) {
          e.printStackTrace();
        }
      }

      return tokenizer.nextToken();
    }

    public Integer readInteger() {
      return Integer.parseInt(read());
    }

    public Long readLong() {
      return Long.parseLong(read());
    }
  }
}
