using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { { WriteLine("? 1 1"); var s = ReadLine(); if (s == "<") { WriteLine($"! 0"); return; } if (s == ">") { WriteLine($"? 0 0"); ReadLine(); } } var len = 100; var ng = new HugeInt(len); ng.Digits[0] = 1; var ok = new HugeInt(len); ok.Digits[len - 1] = 1; // ok - ng > 1 while (ok.IsLarge(HugeInt.Sum(ng, 1))) { var mid = HugeInt.Div(HugeInt.Sum(ok, ng), 2); WriteLine($"? 1 {mid}"); var s = ReadLine(); if (s == "<") ok = mid; else if (s == "=") { WriteLine($"! {mid}"); return; } else { ng = mid; WriteLine($"? 0 0 "); ReadLine(); } } WriteLine($"! {HugeInt.Rem(ok, 1)}"); } class HugeInt { public List Digits; public HugeInt(int length) { Digits = new List(length); for (var i = 0; i < length; ++i) Digits.Add(0); } public bool IsLarge(HugeInt b) { for (var i = Digits.Count - 1; i >= 0; --i) { if (Digits[i] > b.Digits[i]) return true; if (Digits[i] < b.Digits[i]) return false; } return false; } public override string ToString() { var c = new List(Digits.Count); var flg = false; for (var i = Digits.Count - 1; i >= 0; --i) { if (Digits[i] > 0) flg = true; if (flg) c.Add((char)(Digits[i] + '0')); } return string.Concat(c); } public static HugeInt Sum(HugeInt a, int b) { var ans = new HugeInt(a.Digits.Count); var add = b; for (var i = 0; i < a.Digits.Count; ++i) { var sum = a.Digits[i] + add; ans.Digits[i] = sum % 10; add = sum / 10; } return ans; } public static HugeInt Rem(HugeInt a, int b) { var ans = new HugeInt(a.Digits.Count); for (var i = 0; i < a.Digits.Count; ++i) ans.Digits[i] = a.Digits[i]; ans.Digits[0] -= b; for (var i = 0; i < ans.Digits.Count; ++i) { if (ans.Digits[i] < 0) { var d = ans.Digits[i] / 10; ans.Digits[i] += d * 10; if (ans.Digits[i] < 0) { ++d; ans.Digits[i] += 10; } ans.Digits[i + 1] -= d; } } return ans; } public static HugeInt Sum(HugeInt a, HugeInt b) { var ans = new HugeInt(a.Digits.Count); var add = 0; for (var i = 0; i < a.Digits.Count; ++i) { var sum = a.Digits[i] + b.Digits[i] + add; ans.Digits[i] = sum % 10; add = sum / 10; } return ans; } public static HugeInt Div(HugeInt a, int d) { var ans = new HugeInt(a.Digits.Count); var rem = 0; for (var i = a.Digits.Count - 1; i >= 0; --i) { rem = rem * 10 + a.Digits[i]; ans.Digits[i] = rem / d; rem = rem % d; } return ans; } } }