func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize( O3 )   #pragma GCC target( sse4 )   const char nl =   n ;   using namespace std;   using ll = long long;   using vi = vector<int>;   using vl = vector<ll>;   using pii = pair<int, int>;   using pll = pair<ll, ll>;   using str = string;   str to_string(char c) { return str(1, c); }   str to_string(bool b) { return b ?  true  :  false ; }   str to_string(const char* second) { return (str)second; }   str to_string(str second) { return second; }   template <class A>   str to_string(complex<A> c) {     stringstream ss;     ss << c;     return ss.str();   }   str to_string(vector<bool> v) {     str res =  { ;     for (int i = 0; i < (int)v.size(); i++) res += char( 0  + v[i]);     res +=  } ;     return res;   }   template <size_t SZ>   str to_string(bitset<SZ> b) {     str res =   ;     for (int i = 0; i < b.size(); i++) res += char( 0  + b[i]);     return res;   }   template <class A, class B>   str to_string(pair<A, B> p);   template <class T>   str to_string(T v) {     bool fst = 1;     str res =  { ;     for (const auto& x : v) {       if (!fst) res +=  ,  ;       fst = 0;       res += to_string(x);     }     res +=  } ;     return res;   }   template <class A, class B>   str to_string(pair<A, B> p) {     return  (  + to_string(p.first) +  ,   + to_string(p.second) +  ) ;   }   void DBG() { cerr <<  ]  << endl; }   template <class H, class... T>   void DBG(H h, T... t) {     cerr << to_string(h);     if (sizeof...(t)) cerr <<  ,  ;     DBG(t...);   }   string c;   int n;   int dp[26][26];   signed main() {     cin.tie(nullptr);     ios_base::sync_with_stdio(false);     cin >> n;     for (int i = 0; i < 26; i++) {       for (int j = 0; j < 26; j++) {         dp[i][j] = -1e9;       }     }     int ans = 0;     for (int i = 0; i < n; i++) {       cin >> c;       int m = c.length();       int a = c[0] -  a ;       int b = c[m - 1] -  a ;       for (int j = 0; j < 26; j++) {         dp[j][b] = max(dp[j][b], dp[j][a] + m);       }       dp[a][b] = max(dp[a][b], m);     }     for (int i = 0; i < 26; i++) {       ans = max(ans, dp[i][i]);     }     cout << ans << nl;   }   