func_code_string: #include <bits/stdc++.h>   using namespace std;   struct node;   struct node {     node* arr[26];     int val;     node();     void insert(char ch[], int l, int pos);     void win();     void lose();   };   node::node() {     val = 0;     for (int i = 0; i < 26; i++) arr[i] = 0;   }   void node::insert(char ch[], int l, int pos) {     if (pos == l)       return;     else {       int index = ch[pos] -  a ;       if (arr[index] == 0) {         arr[index] = new node();         arr[index]->insert(ch, l, pos + 1);       } else {         arr[index]->insert(ch, l, pos + 1);       }     }   }   void node::win() {     int ind = 0;     for (int i = 0; i < 26; i++) {       if (arr[i] != 0) {         arr[i]->win();         ind = ind | arr[i]->val;       }     }     val = !ind;   }   void node::lose() {     int ind = 1;     int leaf = 1;     for (int i = 0; i < 26; i++) {       if (arr[i] != 0) {         leaf = 0;         arr[i]->lose();         ind = ind & arr[i]->val;       }     }     if (leaf)       val = leaf;     else       val = !ind;   }   int main() {     int n, k;     scanf( %d %d , &n, &k);     node* root = new node();     char ch[100000];     for (int i = 0; i < n; i++) {       scanf( %s , ch);       int l = strlen(ch);       root->insert(ch, l, 0);     }     int ind = 0;     for (int i = 0; i < 26; i++) {       if (root->arr[i] != 0) {         root->arr[i]->win();         ind = ind | root->arr[i]->val;       }     }     int w = ind;     ind = 0;     for (int i = 0; i < 26; i++) {       if (root->arr[i] != 0) {         root->arr[i]->lose();         ind = ind | !root->arr[i]->val;       }     }     int l = ind;     if (w & l) {       printf( First n );     } else if (w & !l) {       if (k & 1)         printf( First n );       else         printf( Second n );     } else       printf( Second n );   }   