import times, strutils, sequtils, math, algorithm, tables, sets, lists, intsets import critbits, future, strformat, deques template `max=`(x,y) = x = max(x,y) template `min=`(x,y) = x = min(x,y) template `mod=`(x,y) = x = x mod y template scan2 = (scan(), scan()) template scan3 = (scan(), scan()) let read* = iterator: string {.closure.} = while true: (for s in stdin.readLine.split: yield s) proc scan(): int = read().parseInt proc scanf(): float = read().parseFloat proc toInt(c:char): int = return int(c) - int('0') proc getLowLink(G:seq[seq[int]],start:int=0):(seq[int],seq[(int,int)])= var N = G.len order = newseqwith(N,-1) used = newseqwith(N,false) loww = newseqwith(N,0) acP = newseq[int]() bridge = newseq[(int,int)]() proc dfs(idx, k, par:int):int= var k = k isA = false cnt = 0 used[idx]=true order[idx]=k k+=1 loww[idx]=order[idx] for nxt in G[idx]: if not used[nxt]: cnt+=1 k = dfs(nxt,k,idx) loww[idx].min=loww[nxt] isA = isA or ( par != -1 and (loww[nxt] >= order[idx])) if order[idx]1) if isA: acP.add(idx) return k proc build()= var k = 0 for i in 0..0: var p = q.popFirst() for nxt in es[p]: if touched[nxt]<0: touched[nxt]=cnt q.addLast(nxt) cnt+=1 if cnt+min(1,bridge.len)>=3: return "Alice" else: return "Bob" echo solve()