#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 1<<19, M = 3<<20;
long long prv[N], cur[N], mod = 999999999999989;
int dp[N], n, Ans, mx;
vector<int> vec[M];
int main(){
ios_base::sync_with_stdio(false); cin.tie(NULL);
cin>>n;
for (int i=1;i<=n;i++){
string s;
cin>>s;
int m = s.size();
for (int j=m-1;j>=0;j--){
prv[i] = cur[i];
cur[i] = (1LL * cur[i] * 256 + s[j]) % mod;
}
mx = max(mx, m);
vec[m].push_back(i);
}
for (int i=1;i<=mx;i++){
sort(begin(vec[i]), end(vec[i]), [&](int x, int y){return prv[x] < prv[y];});
for (int j=0, k = 0;j<vec[i].size();j = k){
while (k < vec[i].size() and prv[vec[i][k]] == prv[vec[i][j]])
k++;
for (int l=j;l<k;l++)
dp[vec[i][l]] = k - j;
}
int k = 0, mx = 0;
for (int j : vec[i]){
while (k < vec[i-1].size() and prv[j] > cur[vec[i-1][k]])
mx = 0, k++;
while (k < vec[i-1].size() and prv[j] == cur[vec[i-1][k]])
mx = max(mx, dp[vec[i-1][k]]), k++;
dp[j] += mx;
Ans = max(Ans, dp[j]);
}
sort(begin(vec[i]), end(vec[i]), [&](int x, int y){return cur[x] < cur[y];});
}
cout<<Ans<<'\n';
}