func_code_string: #include <bits/stdc++.h>   using namespace std;   struct Node {     Node *ch[26];     Node() {       for (int i = 0; i < 26; i++) ch[i] = NULL;     }   } * Root;   struct Trie {     void init() { Root = new Node(); }     void ins(Node *t, string s) {       for (int i = 0; i < s.size(); i++) {         int id = s[i] -  a ;         if (t->ch[id] == NULL) {           Node *p = new Node();           t->ch[id] = p;         }         t = t->ch[id];       }     }     void del(Node *t) {       for (int i = 0; i < 26; i++)         if (t->ch[i] != NULL) del(t->ch[i]);       free(t);     }     bool win(Node *t) {       for (int i = 0; i < 26; i++)         if (t->ch[i] != NULL)           if (!win(t->ch[i])) return true;       return false;     }     bool lose(Node *t) {       bool flag = 0;       for (int i = 0; i < 26; i++)         if (t->ch[i] != NULL) {           flag = true;           if (!lose(t->ch[i])) return true;         }       return false || !flag;     }   };   const int Maxn = 1e5 + 8;   char s[Maxn];   int main() {     Trie T;     T.init();     int n, k;     scanf( %d %d , &n, &k);     for (int i = 0; i < n; i++) {       scanf( %s , s);       T.ins(Root, s);     }     bool win = T.win(Root), lose = T.lose(Root);     if (win && lose)       puts( First );     else {       if (win) {         if (k & 1)           puts( First );         else           puts( Second );       } else         puts( Second );     }     return 0;   }   