import sys def solve(): input = sys.stdin.readline line = input().strip() if not line: return N = int(line) P = [0] * (N - 1) for i in range(N - 1): sys.stdout.write(f"? {i} {N - 1}\n") sys.stdout.flush() res = int(input().strip()) if res == -1: return P[i] = res non_zeros = [i for i, p in enumerate(P) if p != 0] if len(non_zeros) == 0: sys.stdout.write("! -1\n") sys.stdout.flush() elif len(non_zeros) == 1: k = non_zeros[0] p = P[k] candidates = [] for d in range(1, 10): if p % d == 0 and p // d <= 9: candidates.append(d) if len(candidates) == 1: d = candidates[0] ans_digits = [0] * N ans_digits[N - 1] = d ans_digits[k] = p // d ans_str = "".join(str(ans_digits[i]) for i in range(N - 1, -1, -1)) sys.stdout.write(f"! {ans_str}\n") sys.stdout.flush() else: sys.stdout.write("! -1\n") sys.stdout.flush() else: S = [] for d in range(1, 10): valid = True for p in P: if p % d != 0 or p // d > 9: valid = False break if valid: S.append(d) if len(S) == 1: d = S[0] ans_digits = [0] * N ans_digits[N - 1] = d for i in range(N - 1): ans_digits[i] = P[i] // d ans_str = "".join(str(ans_digits[i]) for i in range(N - 1, -1, -1)) sys.stdout.write(f"! {ans_str}\n") sys.stdout.flush() else: u = non_zeros[0] v = non_zeros[1] sys.stdout.write(f"? {u} {v}\n") sys.stdout.flush() ans = int(input().strip()) if ans == -1: return found_d = -1 for d in S: if (P[u] // d) * (P[v] // d) == ans: found_d = d break if found_d != -1: ans_digits = [0] * N ans_digits[N - 1] = found_d for i in range(N - 1): ans_digits[i] = P[i] // found_d ans_str = "".join(str(ans_digits[i]) for i in range(N - 1, -1, -1)) sys.stdout.write(f"! {ans_str}\n") sys.stdout.flush() else: sys.stdout.write("! -1\n") sys.stdout.flush() if __name__ == '__main__': solve()