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() { var len = 5; var ans = new HugeInt(len); var max = new HugeInt(len); max.Digits[len - 1] = 1; var mul = new List { HugeInt.Sum(new HugeInt(len), 1) }; while (true) { var next = HugeInt.Sum(mul[^1], mul[^1]); if (next.IsLarge(max)) break; mul.Add(next); } for (var i = mul.Count - 1; i >= 0; --i) { WriteLine($"? 1 {mul[i]}"); var s = ReadLine(); if (s != "<") { ans = HugeInt.Sum(ans, mul[i]); } } WriteLine($"! {ans}"); } 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; } } }