func_code_string: #include <bits/stdc++.h>   using namespace std;   struct node {     node *next[26];     node() {       for (int i = 0; i < 26; i++) next[i] = NULL;     }   };   void insert(node *root, string &str) {     node *current = root;     for (char ch : str) {       if (current->next[ch -  a ] == NULL) {         current->next[ch -  a ] = new node();       }       current = current->next[ch -  a ];     }   }   int canLose(node *root) {     int was = 1, leaf = 0;     for (int i = 0; i < 26; i++) {       if (root->next[i]) {         was = min(was, 1 ^ canLose(root->next[i]));         leaf = 1;       }     }     return was & leaf;   }   int canWin(node *root) {     int was = 0;     for (int i = 0; i < 26; i++) {       if (root->next[i]) {         was = max(was, 1 ^ canWin(root->next[i]));       }     }     return was;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     node *root = new node();     int n, k;     cin >> n >> k;     for (int i = 1; i <= n; i++) {       string str;       cin >> str;       insert(root, str);     }     if (canWin(root) && !canLose(root)) {       cout <<  First  << endl;     } else if (canWin(root)) {       if (k & 1) {         cout <<  First  << endl;       } else {         cout <<  Second  << endl;       }     } else {       cout <<  Second  << endl;     }     return 0;   }   