output_description: If Alice will win, print `Alice`; if Bob will win, print `Bob`.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N L
      s_1
      s_2
      :
      s_N
attempt: N, L = map(int, input().split())
  S = [input() for _ in range(N)]
  S.sort()
  st = []
  for s in S:
      st.append(s)
      while len(st) >= 2:
          s1, s2 = st[-2:]
          if s1[:-1] == s2[:-1]:
              del st[-2:]
              st.append(s1[:-1])
          else:
              break
  if st[0] == "":
      print("Bob")
      exit()
  # st = list(map(list, st))
  
  
  def add1(s):
      if s.count("0") == 0:
          return ["0"] * len(s)
      i = 1
      while s[-i] == "1":
          i += 1
      return s[:-i] + ["1"] + ["0"] * (i - 1)
  
  
  s_p = st[0]
  from collections import defaultdict
  
  dd_ans = defaultdict(bool)
  for i, c in enumerate(s_p):
      if c == "1":
          level, m = divmod(L - i - 1, 3)
          dd_ans[(level, m % 2)] ^= True
  for i, c in enumerate(st[-1]):
      if c == "0":
          level, m = divmod(L - i - 1, 3)
          dd_ans[(level, m % 2)] ^= True
  for s in st[1:]:
      # print(ans)
      s_copy = s
      if len(s_p) < len(s):
          s_p += "1" * (len(s) - len(s_p))
      else:
          s += "0" * (len(s_p) - len(s))
      a = 0
      f = True
      for i, (c1, c2) in enumerate(zip(s_p, s)):
          if f:
              if c1 != c2:
                  f = False
          else:
              if c1 == "0":
                  level, m = divmod(L - i - 1, 3)
                  dd_ans[(level, m % 2)] ^= True
              if c2 == "1":
                  level, m = divmod(L - i - 1, 3)
                  dd_ans[(level, m % 2)] ^= True
      # ans ^= a
      s_p = s_copy
  
  print("Alice" if sum(dd_ans.values()) else "Bob")
  
problem_description: Statement
  
  For strings s and t, we will say that s and t are _prefix-free_ when neither
  is a prefix of the other.
  
  Let L be a positive integer. A set of strings S is a _good string set_ when
  the following conditions hold true:
  
    * Each string in S has a length between 1 and L (inclusive) and consists of the characters `0` and `1`.
    * Any two distinct strings in S are prefix-free.
  
  We have a good string set S = \\{ s_1, s_2, ..., s_N \\}. Alice and Bob will
  play a game against each other. They will alternately perform the following
  operation, starting from Alice:
  
    * Add a new string to S. After addition, S must still be a good string set.
  
  The first player who becomes unable to perform the operation loses the game.
  Determine the winner of the game when both players play optimally.
samples: [{"input": "2 2\n    00\n    01", "output": "Alice\n    \n\nIf Alice adds `1`, Bob will be unable to add a new string.\n\n* * *"}, {"input": "2 2\n    00\n    11", "output": "Bob\n    \n\nThere are two strings that Alice can add on the first turn: `01` and `10`. In\ncase she adds `01`, if Bob add `10`, she will be unable to add a new string.\nAlso, in case she adds `10`, if Bob add `01`, she will be unable to add a new\nstring.\n\n* * *"}, {"input": "3 3\n    0\n    10\n    110", "output": "Alice\n    \n\nIf Alice adds `111`, Bob will be unable to add a new string.\n\n* * *"}, {"input": "2 1\n    0\n    1", "output": "Bob\n    \n\nAlice is unable to add a new string on the first turn.\n\n* * *"}, {"input": "1 2\n    11", "output": "Alice\n    \n\n* * *"}, {"input": "2 3\n    101\n    11", "output": "Bob"}]