#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Trim().Split(' '), 0); return T.Parse(_input[_iter++], null); } #endregion var t = I(); var x0 = I(); var y0 = I(); var xt = I(); var yt = I(); int D(int x0, int y0, int x1, int y1) => Math.Abs(x0 - x1) + Math.Abs(y0 - y1); var pass = 0; var fail = t; while (Math.Abs(pass - fail) >= 2) { var mid = (pass + fail) >> 1; Console.WriteLine("? " + mid); var xm = I(); var ym = I(); var f = D(x0, y0, xm, ym) <= D(xt, yt, xm, ym); if (f) pass = mid; else fail = mid; } Console.WriteLine("! " + pass);