#!/usr/bin/env python3 import random n = int(input()) d = [(-1, 0), (0, 1), (1, 0), (0, -1)] def q(x, y): if x < 1 or x > n or y < 1 or y > n: return -1 print("?", x, y) return int(input()) if n == 1: print("!", q(1, 1)), exit() x, y = n // 2, n // 2 # Sample n random points, and start at the best one. best = 0 # Exponentially decaying window. window = n * 1.0 for i in range(10 * n): window *= 1 - 1.0 / n w = max(int(window), 0) xi = random.randint(max(1, x - w), min(n, x + w)) yi = random.randint(max(1, y - w), min(n, y + w)) assert 1 <= xi <= n assert 1 <= yi <= n v = q(xi, yi) if v > best: best = v x, y = xi, yi print("!", best)