import sys def ask(a: int, b: int) -> int: if a > b: a, b = b, a print(f"? {a} {b}", flush=True) p = int(sys.stdin.readline()) if p == -1: sys.exit(0) return p def answer(value: str) -> None: print(f"! {value}", flush=True) sys.exit(0) def main() -> None: line = sys.stdin.readline() if not line: return n = int(line) top = n - 1 products = [0] * n nonzero_lower = [] for i in range(n - 1): products[i] = ask(i, top) if products[i] > 0: nonzero_lower.append(i) digits = [0] * n if len(nonzero_lower) >= 2: i, j = nonzero_lower[0], nonzero_lower[1] lower_product = ask(i, j) top_square = products[i] * products[j] // lower_product top_digit = -1 for d in range(1, 10): if d * d == top_square: top_digit = d break if top_digit == -1: answer("-1") digits[top] = top_digit for i in range(n - 1): if products[i] == 0: digits[i] = 0 else: digits[i] = products[i] // top_digit answer("".join(map(str, reversed(digits)))) if len(nonzero_lower) == 1: i = nonzero_lower[0] unique_pairs = { 1: 1, 25: 5, 49: 7, 64: 8, 81: 9, } d = unique_pairs.get(products[i]) if d is None: answer("-1") digits[top] = d digits[i] = d answer("".join(map(str, reversed(digits)))) answer("-1") if __name__ == "__main__": main()