import System.IO solve :: Int -> Int -> IO () solve l r = do if (l >= r) then do putStrLn $ "! " ++ show l hFlush stdout else do let mid = (l + r + 1) `div` 2 putStrLn $ "? " ++ show mid hFlush stdout res <- readLn :: IO Int if (res == 1) then solve mid r else solve l (mid-1) main :: IO () main = do solve 0 (10^9)