func_code_string: #include <bits/stdc++.h>   using namespace std;   struct Node {     vector<Node*> next;     Node() : next(26, nullptr) {}   };   Node* root = new Node;   void insert(string& s, int i, Node* c) {     if (i >= s.length()) return;     if (c->next[s[i] -  a ] == nullptr) {       c->next[s[i] -  a ] = new Node;     }     insert(s, i + 1, c->next[s[i] -  a ]);   }   bool traverseWin(Node* c) {     bool curWin = false;     for (auto n : c->next)       if (n != nullptr) {         if (!traverseWin(n)) curWin = true;       }     return curWin;   }   bool traverseLose(Node* c) {     bool curLose = false;     int i = 0;     for (auto n : c->next)       if (n != nullptr) {         ++i;         if (!traverseLose(n)) curLose = true;       }     return curLose || (i == 0);   }   int main(int, char**) {     std::ios::sync_with_stdio(false);     int n, k;     cin >> n >> k;     for (int i = 0; i < n; ++i) {       string s;       cin >> s;       insert(s, 0, root);     }     bool w = traverseWin(root);     bool l = traverseLose(root);     if (!w) {       cout <<  Second  << endl;     } else {       if (!l) {         cout << (k % 2 == 0 ?  Second  :  First ) << endl;       } else {         cout <<  First  << endl;       }     }     return 0;   }   