#include <bits/stdc++.h>
using namespace std;
const int INF = 2147483647;
const int maxn = 2000010;
int vis[maxn];
double f[maxn];
int N, M;
char s[61][2000];
double ans;
long long same[110][110], check[maxn], cnt[maxn], num[maxn];
double dfs(int status) {
  int tot = 0, flag = 0;
  if (vis[status]) return f[status];
  f[status] = 0;
  vis[status] = 1;
  if (!check[status]) return f[status] = 0;
  for (int k = 1; k <= M; k++)
    if (!(status & (1 << k - 1)))
      f[status] += dfs(status + (1 << k - 1)), tot++;
  f[status] /= tot;
  f[status] += 1.0;
  return f[status];
}
int main() {
  cin >> N;
  if (N == 1) return puts("0.00000000000"), 0;
  for (int i = 1; i <= N; i++) scanf("%s", s[i] + 1);
  M = strlen(s[1] + 1);
  for (int i = 1; i <= N; i++)
    for (int j = 1; j <= N; j++)
      if (j != i)
        for (int k = 1; k <= M; k++)
          if (s[i][k] == s[j][k]) same[i][k] |= (1LL << j - 1);
  for (int i = 1; i < (1 << M); i++) num[i] = num[i & i - 1] + 1;
  for (int i = 1; i <= N; i++) {
    memset(check, 0, sizeof(check));
    check[0] = (1LL << N) - 1;
    for (int k = 1; k <= M; k++) check[1 << k - 1] = same[i][k];
    for (int k = 1; k < (1 << M); k++) {
      check[k] = (check[k & -k] & check[k - (k & -k)]);
      if (check[k] != 0) cnt[k]++;
    }
  }
  for (int i = (1 << M) - 1; i >= 0; i--) {
    int tot = 0;
    for (int k = 1; k <= M; k++)
      if (!(i & (1 << k - 1))) {
        f[i] += f[i | (1 << k - 1)];
        tot++;
      }
    if (tot) f[i] /= tot;
    f[i] += 1.0 * cnt[i] / N;
  }
  printf("%.10f\n", f[0] + 1.0);
  return 0;
}
