#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;
}
