fn read() -> usize { let mut s = String::new(); std::io::stdin().read_line(&mut s).unwrap(); s.trim().parse().unwrap() } fn main() { let w = 100usize; let query = |x: usize, y: usize| -> usize { assert!(x <= w && y <= w); println!("? {} {}", x, y); read() }; let a = query(0, 0); let b = query(100, 0); for i in 0..=w { for j in 0..=w { if i.pow(2) + j.pow(2) == a && (w - i).pow(2) + j.pow(2) == b { println!("! {} {}", i, j); return; } } } }