#include <cstdio>
#include <cstring>
#include <algorithm>
using std::max;
const int MAXF = 1000010;
const int MAXN = 110;
int n;
int base[MAXN], len[MAXN], pos[MAXN];
char ans;
char f[MAXF];
char words[MAXN][MAXN];
void solve()
{
int idx = 0;
for (int i = 0; i < n; i++)
{
idx += (pos[i] - 1) * base[i];
}
bool same = true, has_one = false;
for (int i = 1; i < n; i++)
{
if (words[i][pos[i] - 1] != words[0][pos[0] - 1])
{
same = false;
break;
}
if (pos[i] == 1)
{
has_one = true;
}
}
if (same)
{
if (has_one)
{
f[idx] = 1;
}
else
{
int p_idx = idx;
for (int i = 0; i < n; i++)
{
p_idx -= base[i];
}
f[idx] = f[p_idx] + 1;
}
}
else
{
for (int i = 0; i < n; i++)
{
if (pos[i] == 1) continue;
f[idx] = max(f[idx], f[idx - base[i]]);
}
}
ans = max(ans, f[idx]);
}
void dp(int p)
{
if (p == n)
{
return solve();
}
for (int i = 1; i <= len[p]; i++)
{
pos[p] = i;
dp(p + 1);
}
}
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%s", words[i]);
len[i] = strlen(words[i]);
}
base[0] = 1;
for (int i = 1; i < n; i++)
{
base[i] = base[i - 1] * len[i - 1];
}
dp(0);
printf("%d\n", ans);
return 0;
}