// fn main() { let mut cnt = 0; let mut query = |x: i32| -> i32 { assert!(x.abs() <= 1_000_000_000); assert!(cnt < 25); cnt += 1; println!("? {x}"); if cnt > 1 { let v = read(); assert!(v != -1); v } else { 0 } }; let mut l = 1; let mut r = 1000000; let mut pre = l; query(l); while l + 2 <= r { let m = (l + r) / 2; let x = 2 * m - pre; let res = query(x); if (res == 1) ^ (pre <= m) { r = m; } else { l = m; } pre = x; } query(l); let ans = if query(r) == 1 {r} else {l}; println!("! {}", ans); } fn read() -> i32 { let mut s = String::new(); std::io::stdin().read_line(&mut s).unwrap(); s.trim().parse().unwrap() }