#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 random = new Random(); var d = I(); for (var i = 0; i < 3; i++) { var z = random.Next(1, 30); var w = random.Next(1, 30); Console.WriteLine("? " + z); var y0 = I(); Console.WriteLine("? " + (z + w)); var y1 = I(); Console.WriteLine("? " + (z + w + w)); var y2 = I(); var d1 = (y1 - y0) / w; var d2 = (y2 - y1) / w; if (Math.Abs(d1 - d2) >= 1) { var ans = (Int128)Math.Max(d1, d2); Console.WriteLine("! " + ans); return; } } Console.WriteLine("! " + "NaN");