func_code_string: #include <bits/stdc++.h>   using namespace std;   struct state {     bool win;     int first, second;     state() : win(false), first(0), second(1e9){};     state(bool nwin, int nfirst, int nsecond)         : win(nwin), first(nfirst), second(nsecond){};   };   bool operator<(state a, state b) {     return !(a.win > b.win ||              a.win == b.win && (a.first > b.first ||                                 a.first == b.first && a.second < b.second));   }   vector<string> dict;   int exist(string word) {     int res = 0;     for (vector<string>::iterator(i) = (dict).begin(); (i) < (dict).end(); ++(i))       if ((*i).find(word) != string::npos) ++res;     return res;   }   int score(string word) {     if (word ==   ) return 0;     int num = exist(word), value = 0, maxvalue = 0;     if (num == 0) return -1;     for (string::iterator(i) = (word).begin(); (i) < (word).end(); ++(i)) {       value += (*i) -  a  + 1;       maxvalue = max((*i) -  a  + 1, maxvalue);     }     return value * maxvalue + num;   }   map<string, state> d;   state find(string s) {     if (score(s) == -1) return state(false, 0, 0);     if (d.find(s) != d.end()) return d[s];     state res(false, 0, 1e9);     for (int i =  a ; i <=  z ; ++i)       res = max(res, max(find(char(i) + s), find(s + char(i))));     d[s] = state(res.win ^ 1, res.second + score(s), res.first);     return d[s];   }   int main() {     int n;     cin >> n;     for (int i = 0; i < n; ++i) {       string s;       cin >> s;       dict.push_back(s);     }     state ans = find(  );     cout << (ans.win ?  Second n  :  First n ) << ans.second <<     << ans.first;     return 0;   }   