#include <bits/stdc++.h>
using namespace std;
const int N = 150;
const int M = 21;
const int inf = 1e9 + 7;
long long d[1 << M];
int n, m;
char s[N][M];
long double L[M + 7];
bool has(long long mask, int i) { return ((mask >> i) & 1); }
inline int cnt(long long mask) {
  int res = 0;
  for (int i = (int)0; i < (int)m; i++)
    if (has(mask, i)) res++;
  return res;
}
int main() {
  scanf("%d", &n);
  for (int i = (int)0; i < (int)n; i++) scanf("%s", s[i]);
  m = strlen(s[0]);
  for (int i = (int)0; i < (int)n; i++)
    for (int j = (int)0; j < (int)n; j++) {
      if (i == j) continue;
      long long same = 0;
      for (int t = (int)0; t < (int)m; t++)
        if (s[i][t] == s[j][t]) same |= (1 << t);
      d[same] |= (1LL << i);
    }
  for (int mask = (int)(1 << m) - 1; mask > (int)0; mask--) {
    for (int j = (int)0; j < (int)m; j++)
      if ((has(mask, j))) {
        d[mask ^ (1 << j)] |= d[mask];
      }
  }
  for (int mask = (int)0; mask < (int)1 << m; mask++) {
    int move = __builtin_popcount(mask) + 1;
    for (int j = (int)0; j < (int)m; j++)
      if (!has(mask, j)) {
        long long res = d[mask] ^ d[mask ^ (1 << j)];
        if (res == 0) continue;
        int tmp = __builtin_popcountll(res);
        L[move] += tmp;
      }
  }
  long double res = 0;
  for (int i = (int)1; i < (int)m + 1; i++) {
    long double val = L[i] * i;
    for (int j = (int)0; j < (int)i - 1; j++) {
      val *= (long double)(i - j - 1) / (long double)(m - j);
    }
    res += val / (long double)(m - i + 1);
  }
  res /= (long double)n;
  cout << fixed << std::setprecision(15) << res;
}
