10
abdcced
bdacdac
ecb
dc
eaeeebdd
adcdbadcac
eb
aadecccde
edbaeacad
accd
 100
d
a
e
eb
c
d
d
e
c
e
ac
d
c
aa
a
e
da
e
e
c
e
a
c
c
bc
bd
d
da
cc
be
b
a
ee
d
be
be
e
b
a
ed
cb
ab
a
ea
ac
aa
ed
d
b
eb
e
ed
c
ce
c
d
c
d
d
ee
e
b
ea
ea
da
ab
ba
ed
da
ec
ea
bd
ee
dc
d
bd
d
c
cc
ab
bd
a
ad
e
d
e
bc
bb
c
bc
a
a
e
ca
ac
c
ad
c
be
d
 3
ab
acb
ba
 10
a
b
a
c
b
a
b
a
a
a
 5
cab
bbc
caa
ccc
aca
 3
ac
abc
ca
 5
ab
bc
cd
de
ffffffffff
 16
ddgcb
fgbhgbdg
gha
dh
ddfb
fggbc
edb
hd
d
hfgcabf
hdaef
fhbcdgba
chee
cafeggc
f
ecb
 50
agecd
cghafi
fiide
iecc
jbdcfjhgd
diee
hfeg
ehc
gfijgjh
gacaifebg
dicbbddc
hjgciaei
jjcdh
g
gc
cf
hfdjhd
c
icidbec
ji
eeh
cgeejggc
acfd
jjg
ajefdj
eghhebiic
bih
gbb
jjaa
idc
gafi
ecg
dbigbjiehj
cedif
ahidfaaajg
hfhhiccbgb
dgegjgieif
hgjebhfdc
j
ahehd
ahdah
bijbhh
a
dabiggfhac
dedigbjbf
ihbdj
iihagchd
gfebhfdi
jbjdcggdh
f

0
 35
 5
 6
 9
 5
 10
 7
 37

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
const ll MOD = 1e+9 + 7;
const int N = 5e5 + 5;
int n;
int positions[26][N];
string names[N];
ll values[N][26];
void dp() {
  for (int idx = n; idx > 0; idx--)
    for (char ch = 'a'; ch <= 'z'; ch++) {
      char last = names[idx].back();
      char first = names[idx][0];
      ll v1 = INT_MIN, v2 = INT_MIN, v3 = INT_MIN;
      if (ch == last) v1 = names[idx].size();
      if (positions[last - 'a'][idx + 1] != n + 1) {
        int pos = positions[last - 'a'][idx + 1];
        v2 = names[idx].size() + values[pos][ch - 'a'];
      }
      if (positions[first - 'a'][idx + 1] != n + 1) {
        int pos = positions[first - 'a'][idx + 1];
        v3 = values[pos][ch - 'a'];
      }
      values[idx][ch - 'a'] = max({v1, v2, v3});
    }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  cout << fixed;
  cout << setprecision(10);
  for (int i = 1; i <= 500000; i++)
    for (int j = 0; j < 26; j++) values[i][j] = 0;
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> names[i];
  for (int i = 1; i <= n; i++) positions[names[i][0] - 'a'][i] = 1;
  for (int i = 0; i < 26; i++) {
    positions[i][n + 1] = n + 1;
    for (int j = n; j > 0; j--)
      if (positions[i][j])
        positions[i][j] = j;
      else
        positions[i][j] = positions[i][j + 1];
  }
  dp();
  ll ans = 0;
  for (int i = 1; i <= n; i++) ans = max(ans, values[i][names[i][0] - 'a']);
  cout << ans;
}
