import algorithm, complex, macros, math, sequtils, sets, strformat, strutils, sugar, tables macro unpack*(rhs: seq, cnt: static[int]): auto = let v = genSym(); result = quote do:(let `v` = `rhs`;()) for i in 0 ..< cnt: result[1].add(quote do:`v`[`i`]) template input*(T: typedesc, cnt: Natural = 1): untyped = let line = stdin.readLine.split(" ") when T is int: line.map(parseInt).unpack(cnt) elif T is float: line.map(parseFloat).unpack(cnt) elif T is string: line.unpack(cnt) elif T is char: line.mapIt(it[0]).unpack(cnt) elif T is seq[int]: line.map(parseint) elif T is seq[float]: line.map(parseFloat) elif T is seq[string]: line elif T is seq[char]: line.mapIt(it[0]) proc `|=`*(n: var int, m: int) = n = n or m proc `|=`*(n: var bool, m: bool) = n = n or m proc `&=`*(n: var int, m: int) = n = n and m proc `&=`*(n: var bool, m: bool) = n = n and m proc `^=`*(n: var int, m: int) = n = n xor m proc `^=`*(n: var bool, m: bool) = n = n xor m proc `%=`*(n: var int, m: int) = n = n mod m proc `/=`*(n: var int, m: int) = n = n div m proc `<<=`*(n: var int, m: int) = n = n shl m proc `>>=`*(n: var int, m: int) = n = n shr m proc `?=`*(n: var SomeNumber, m: SomeNumber) = n = max(n, m) proc newSeq2*[T](n1, n2: Natural): seq[seq[T]] = newSeqWith(n1, newSeq[T](n2)) proc newSeq3*[T](n1, n2, n3: Natural): seq[seq[seq[T]]] = newSeqWith(n1, newSeqWith(n2, newSeq[T](n3))) # -------------------------------------------------- # type UnionFind = object data: seq[int] proc initUnionFind*(N: int): UnionFind = result.data = newSeqWith(N + 1, -1) proc find*(this: var UnionFind, v: int): int = if this.data[v] < 0: return v this.data[v] = this.find(this.data[v]) return this.data[v] proc unite*(this: var UnionFind, u, v: int) = var u = this.find(u) var v = this.find(v) if u == v: return if this.data[u] < this.data[v]: swap(u, v) this.data[v] += this.data[u] this.data[u] = v proc same*(this: var UnionFind, u, v: int): bool = return this.find(u) == this.find(v) proc size*(this: var UnionFind, v: int): int = return -this.data[this.find(v)] # -------------------------------------------------- # let N = input(int) var union = initUnionFind(N) var deg = newseq[int](N + 1) for _ in 1 .. N - 1: var (u, v) = input(int, 2) u += 1; v += 1 union.unite(u, v) deg[u] += 1; deg[v] += 1 var cnt = 0 for i in 1 .. N: if union.find(i) == i: cnt += 1 if cnt == 1: echo "Bob" elif cnt >= 3: echo "Alice" else: if deg.count(2) == N - 1 and deg.count(0) == 2: echo "Bob" else: echo "Alice"