#include <bits/stdc++.h>
using namespace std;
const int seed = 10;
char str[6][100];
unsigned long long s[6][10000];
int p[100010];
int len[6];
int n;
bool ifo[6];
int ans = 0;
bool check(int x) {
bool ioo = false;
for (int i = 1; i <= len[1] - x; i++) {
memset(ifo, false, sizeof(ifo));
unsigned long long num = s[1][i + x - 1] - s[1][i - 1] * p[x];
for (int j = 2; j <= 5; j ++) {
for (int h = 1; h <= len[j] - x; h++) {
unsigned long long num2 = s[j][h + x - 1] - s[j][h - 1] * p[x];
if (num == num2) {
ifo[j] = true;
}
}
}
int num1 = 0;
for (int i = 2; i <= 5; i++) {
if (ifo[i]) {
num1++;
}
}
if (num1 == 4) {
ioo = true;
break;
}
}
return ioo;
}
int main() {
cin >> n;
for (int i = 1; i <= n; i ++) {
scanf("%s", str[i] + 1);
len[i] = strlen(str[i] + 1);
for (int j = 1; j <= len[i]; j++) {
s[i][j] = s[i][j - 1] * seed + (str[i][j] - 'a');
}
}
p[0] = 1;
for (int i = 1; i <= 200; i++) {
p[i] = p[i - 1] * seed;
}
int mi = 999999999;
for (int i = 1; i <= n; i++) {
mi = min(len[i], mi);
}
cout << mi << endl;
int l = 1, r = mi;
while (l < r) {
int mid = (l + r) / 2;
if (check(mid)) {
ans = mid;
l = mid + 1;
} else {
r = mid ;
}
}
cout << ans;
return 0;
}