func_code_string: #include <bits/stdc++.h>   using namespace std;   struct node {     node *arr[27];     int ind;     node() {       memset(arr, 0, sizeof arr);       ind = 0;     }   };   const int N = 1e5 + 5;   int dp[N][2];   node *root;   int nodes = 0;   void insert(string &s) {     node *cur = root;     for (int i = 0; i < s.size(); i++) {       int x = s[i] -  a ;       if (!cur->arr[x]) cur->arr[x] = new node(), cur->arr[x]->ind = ++nodes;       cur = cur->arr[x];     }   }   bool solve(node *cur, bool f) {     int &ret = dp[cur->ind][f];     if (ret != -1) return ret;     bool flag = 0, flag1 = 0, flag2 = 1;     for (int i = 0; i < 26; i++) {       if (cur->arr[i]) {         flag = 1;         flag1 |= solve(cur->arr[i], !f);         flag2 &= solve(cur->arr[i], !f);       }     }     if (!flag) return ret = !f;     if (f) return ret = flag1;     return ret = flag2;   }   int dp2[N][2];   bool solve2(node *cur, bool f) {     int &ret = dp2[cur->ind][f];     if (ret != -1) return ret;     bool flag = 0, flag1 = 0, flag2 = 1;     for (int i = 0; i < 26; i++) {       if (cur->arr[i]) {         flag = 1;         flag1 |= solve2(cur->arr[i], !f);         flag2 &= solve2(cur->arr[i], !f);       }     }     if (!flag) return ret = !f;     if (f) return ret = flag2;     return ret = flag1;   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     memset(dp, -1, sizeof dp);     memset(dp2, -1, sizeof dp2);     root = new node();     int n, k;     cin >> n >> k;     for (int i = 0; i < n; i++) {       string s;       cin >> s;       insert(s);     }     node *cur = root;     if (solve(cur, 1) && !solve2(cur, 1))       cout <<  First ;     else if (solve(cur, 1)) {       if (k % 2 == 1)         cout <<  First ;       else         cout <<  Second ;     } else       cout <<  Second ;     return 0;   }   