Problem p03491 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
#define rep(i, a, b) for (int i = a; i < b; i++)
#define rrep(i, a, b) for (int i = a; i >= b; i--)
#define fore(i, a) for (auto &i : a)
#pragma GCC optimize("-O3")
using namespace std;
void _main();
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  _main();
}
//---------------------------------------------------------------------------------------------------
struct Node {
  int hit;
  Node *c[2];
  Node() {
    hit = 0;
    c[0] = c[1] = 0;
  }
};
struct Trie01 {
  Node *root;
  Trie01() { root = new Node(); }
  void add(string x) { update(root, x); }
  void update(Node *&x, string a, int b = 0) {
    if (!x)
      x = new Node();
    if (b == a.length()) {
      x->hit = 1;
      return;
    }
    update(x->c[a[b] - '0'], a, b + 1);
  }
};
/*---------------------------------------------------------------------------------------------------
　　　　　　　　　　　 ∧＿∧
　　　　　 ∧＿∧ 　（´<_｀ ）　 Welcome to My Coding Space!
　　　　 （ ´_ゝ`）　/　 ⌒i
　　　　／　　　＼　 　  |　|
　　　 /　　 /￣￣￣￣/　　|
　 ＿_(__ﾆつ/　    ＿/ .| .|＿＿＿＿
　 　　　＼/＿＿＿＿/　（u　⊃
---------------------------------------------------------------------------------------------------*/

typedef long long ll;
int N;
ll L;
string S[101010];
//---------------------------------------------------------------------------------------------------
ll dfs(Node *n, ll i) {
  if (!n)
    return i & (-i);

  if (n->hit)
    return 0;
  return dfs(n->c[0], i - 1) ^ dfs(n->c[1], i - 1);
}
//---------------------------------------------------------------------------------------------------
void _main() {
  while (cin >> N >> L) {
    rep(i, 0, N) cin >> S[i];

    Trie01 trie;
    rep(i, 0, N) trie.add(S[i]);

    ll g = dfs(trie.root, L + 1);
    if (g != 0)
      printf("Alice\n");
    else
      printf("Bob\n");
  }
}


Fixed submission:
#include <bits/stdc++.h>
#define rep(i, a, b) for (int i = a; i < b; i++)
#define rrep(i, a, b) for (int i = a; i >= b; i--)
#define fore(i, a) for (auto &i : a)
#pragma GCC optimize("-O3")
using namespace std;
void _main();
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  _main();
}
//---------------------------------------------------------------------------------------------------
struct Node {
  int hit;
  Node *c[2];
  Node() {
    hit = 0;
    c[0] = c[1] = 0;
  }
};
struct Trie01 {
  Node *root;
  Trie01() { root = new Node(); }
  void add(string x) { update(root, x); }
  void update(Node *&x, string &a, int b = 0) {
    if (!x)
      x = new Node();
    if (b == a.length()) {
      x->hit = 1;
      return;
    }
    update(x->c[a[b] - '0'], a, b + 1);
  }
};
/*---------------------------------------------------------------------------------------------------
　　　　　　　　　　　 ∧＿∧
　　　　　 ∧＿∧ 　（´<_｀ ）　 Welcome to My Coding Space!
　　　　 （ ´_ゝ`）　/　 ⌒i
　　　　／　　　＼　 　  |　|
　　　 /　　 /￣￣￣￣/　　|
　 ＿_(__ﾆつ/　    ＿/ .| .|＿＿＿＿
　 　　　＼/＿＿＿＿/　（u　⊃
---------------------------------------------------------------------------------------------------*/

typedef long long ll;
int N;
ll L;
string S[101010];
//---------------------------------------------------------------------------------------------------
ll dfs(Node *n, ll i) {
  if (!n)
    return i & (-i);

  if (n->hit)
    return 0;
  return dfs(n->c[0], i - 1) ^ dfs(n->c[1], i - 1);
}
//---------------------------------------------------------------------------------------------------
void _main() {
  while (cin >> N >> L) {
    rep(i, 0, N) cin >> S[i];

    Trie01 trie;
    rep(i, 0, N) trie.add(S[i]);

    ll g = dfs(trie.root, L + 1);
    if (g != 0)
      printf("Alice\n");
    else
      printf("Bob\n");
  }
}