using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static long[] NList => ReadLine().Split().Select(long.Parse).ToArray(); public static void Main() { Solve(); } static void Solve() { var prime = Enumerable.Repeat(true, 1014).ToArray(); prime[0] = false; prime[1] = false; var plist = new List(); for (var i = 2; i < prime.Length; ++i) if (prime[i]) { plist.Add(i); for (var j = i * 2; j < prime.Length; j += i) prime[j] = false; } if (!IsSafe(2)) { WriteLine(IsSafe(1) ? "! 1" : "! 0"); return; } var ok = 0; var ng = plist.Count; while (ng - ok > 1) { var mid = (ok + ng) / 2; if (IsSafe(plist[mid])) ok = mid; else { if (IsSafe(plist[mid + 1])) { var ok2 = mid + 1; while (ng - ok2 > 1) { var mid2 = (ok2 + ng) / 2; if (IsSafe(plist[mid2])) ok2 = mid2; else ng = mid2; } break; } else ng = mid; } } if (IsSafe(plist[ng] + 1)) { ok = plist[ng] + 1; ng = plist[ng + 1]; while (ng - ok > 1) { var mid = (ok + ng) / 2; if (IsSafe(mid)) ok = mid; else ng = mid; } WriteLine("! " + ok); } else { ok = plist[ng - 1]; ng = plist[ng]; while (ng - ok > 1) { var mid = (ok + ng) / 2; if (IsSafe(mid)) ok = mid; else ng = mid; } WriteLine("! " + ok); } } static bool IsSafe(int n) { WriteLine($"? {n}"); return ReadLine() == "safe"; } }