import sys def solve(): first_line = sys.stdin.readline() if not first_line: return N = int(first_line.strip()) # Simpan hasil kali dari d_0 dengan d_i P = [0] * N all_zero = True for i in range(1, N): print(f"? 0 {i}", flush=True) resp = int(sys.stdin.readline().strip()) if resp == -1: sys.exit(0) P[i] = resp if resp != 0: all_zero = False # Jika semua hasil kali dengan d_0 adalah 0 # Berarti d_0 pasti 0, atau semua angka lain (d_1..d_{N-1}) adalah 0 (tapi d_{N-1} tidak boleh 0). # Jadi d_0 PASTI 0. # Karena kita sudah menghabiskan N-1 pertanyaan, dan sisa 1 pertanyaan. # Kita tidak akan pernah bisa menebak N-1 digit lainnya hanya dengan 1 pertanyaan. # Maka, hasilnya pasti ambigu. if all_zero: print("! -1", flush=True) return # Sekarang kita cari kandidat yang valid untuk d_0 valid_configs = [] # d_0 tidak mungkin 0 karena ada P[i] yang bukan 0 for cand_d0 in range(1, 10): possible = True digits = [0] * N digits[0] = cand_d0 for i in range(1, N): if P[i] % cand_d0 != 0: possible = False break cand_di = P[i] // cand_d0 if cand_di < 0 or cand_di > 9: possible = False break digits[i] = cand_di if not possible: continue # Syarat: d_{N-1} (digit paling kiri) tidak boleh 0 (no leading zero) if digits[N-1] == 0: continue valid_configs.append(digits) if len(valid_configs) == 1: # Unik! Kita susun angkanya (ingat: index 0 adalah satuan (kanan), N-1 adalah paling kiri) ans_digits = valid_configs[0] # Reverse karena ans_digits[N-1] ada di paling kiri (indeks 0 string) ans_str = "".join(str(x) for x in reversed(ans_digits)) print(f"! {ans_str}", flush=True) else: # Ambigu atau tidak ditemukan (membutuhkan pertanyaan ekstra yang rumit) print("! -1", flush=True) if __name__ == '__main__': solve()