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;
long long mod = 1000000007;
vector<long long> adj[100005];
long long lca[100005][30];
vector<long long> vis, par, con, depth, ans;
map<pair<long long, long long>, long long> mp;
long long cal(long long node) {
  long long count = 0;
  for (auto j : adj[node]) {
    if (vis[j] == 0) {
      long long ind = mp[{min(node, j), max(node, j)}];
      vis[j] = 1;
      ans[ind] = cal(j);
      count += ans[ind];
    }
  }
  count += con[node];
  return count;
}
void dfs(long long node) {
  for (auto j : adj[node]) {
    if (vis[j] == 0) {
      vis[j] = 1;
      par[j] = node;
      depth[j] = 1 + depth[node];
      dfs(j);
    }
  }
}
long long lcaa(long long u, long long v) {
  if (depth[v] < depth[u]) swap(u, v);
  for (long long i = 19; i >= 0; i--) {
    if (depth[v] - (1 << i) >= depth[u]) v = lca[v][i];
  }
  if (u == v) return u;
  for (long long i = 18; i >= 0; i--) {
    if (lca[u][i] != -1 && lca[u][i] != lca[v][i]) {
      u = lca[u][i];
      v = lca[v][i];
    }
  }
  return lca[u][0];
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int TESTS = 1;
  while (TESTS--) {
    long long n;
    cin >> n;
    vector<vector<long long> > dp(27, std::vector<long long>(27, 0));
    for (long long i = 0; i < n; i++) {
      string s;
      cin >> s;
      long long sz = s.length();
      long long a = s[0] - 'a';
      long long b = s[sz - 1] - 'a';
      for (long long i = 0; i < 26; i++) {
        if (dp[i][a]) {
          dp[i][b] = max(dp[i][b], dp[i][a] + sz);
        }
      }
      dp[a][b] = max(dp[a][b], sz);
    }
    long long ans = 0;
    for (long long i = 0; i < 26; i++) {
      ans = max(ans, dp[i][i]);
    }
    cout << ans << endl;
  }
  return 0;
}
