func_code_string: #include <bits/stdc++.h>   using namespace std;   struct node {     bool w, l;     int a[26];     node() {       w = false;       l = false;       memset(a, -1, sizeof a);     }   };   node a[100030];   long long cnt;   char second[100010];   void insert(long long n) {     int curr = 0;     int i = 0;     while (curr < n) {       if (a[i].a[second[curr] -  a ] == -1) {         a[i].a[second[curr] -  a ] = ++cnt;       }       i = a[i].a[second[curr] -  a ];       curr++;     }   }   void dfs(long long curr) {     if (curr == -1) {       return;     }     int cnt = 0;     for (int i = 0; i < 26; i++) {       if (a[curr].a[i] != -1) {         cnt++;         dfs(a[curr].a[i]);         if (a[a[curr].a[i]].w == false) {           a[curr].w = true;         }         if (a[a[curr].a[i]].l == false) {           a[curr].l = true;         }       }     }     if (cnt == 0) {       a[curr].w = false;       a[curr].l = true;     }   }   int main() {     long long n, k;     cnt = 0;     cin >> n >> k;     for (int i = 0; i < n; i++) {       scanf( %s , second);       insert(strlen(second));     }     dfs(0);     if (a[0].w == true && a[0].l == true) {       cout <<  First  << endl;     } else if (a[0].w == false) {       cout <<  Second  << endl;     } else if (a[0].w == true && a[0].l == false) {       if (k % 2 == 1) {         cout <<  First  << endl;       } else {         cout <<  Second  << endl;       }     }     return 0;   }   