struct Scanner { private var elements = [String]() private var index = 0 mutating func peek() -> String { while elements.count == index { elements = readLine()!.split(separator: " ").map(String.init) index = 0 } return elements[index] } mutating func next() -> String { defer { index += 1 } return peek() } mutating func nextInt() -> Int { return Int(next())! } mutating func nextInts(_ n: Int) -> [Int] { return (0 ..< n).map { _ in nextInt() } } mutating func nextDouble() -> Double { return Double(next())! } } extension Int { func test(_ k: Int) -> Bool { return self >> k & 1 == 1 } } var scanner = Scanner() let N = scanner.nextInt() let A = scanner.nextInts(N) let Q = scanner.nextInt() let B = scanner.nextInts(Q) var last = [Int?](repeating: nil, count: 60) for i in 0 ..< 60 { for j in (0 ..< N).reversed() { if A[j].test(i) { last[i] = j break } } } func solve(_ b: Int) -> Int? { var constraints = [Int: Bool]() for i in last.indices { if let last = last[i] { if let c = constraints[last] { if !b.test(i) != c { return nil } } else { constraints[last] = !b.test(i) } } else { if let c = constraints[0] { if b.test(i) != c { return nil } } else { constraints[0] = b.test(i) } } } var answer = 0 var x = false for (_, y) in constraints.sorted(by: { $0.key > $1.key }) { if x != y { answer += 1 x = y } } return answer } for k in 0 ..< Q { print(solve(B[k]) ?? -1) }