This is an interactive problem.

Vasya and Petya are going to play the following game: Petya has some positive integer number a. After that Vasya should guess this number using the following questions. He can say a pair of non-negative integer numbers (x, y). Petya will answer him: 

  * "x", if (x mod a) ≥ (y mod a). 
  * "y", if (x mod a) < (y mod a). 



We define (x mod a) as a remainder of division x by a.

Vasya should guess the number a using no more, than 60 questions.

It's guaranteed that Petya has a number, that satisfies the inequality 1 ≤ a ≤ 10^9.

Help Vasya playing this game and write a program, that will guess the number a.

Interaction

Your program should play several games.

Before the start of any game your program should read the string: 

  * "start" (without quotes) — the start of the new game. 
  * "mistake" (without quotes) — in the previous game, you found the wrong answer. Your program should terminate after reading this string and it will get verdict "Wrong answer". 
  * "end" (without quotes) — all games finished. Your program should terminate after reading this string. 



After reading the string "start" (without quotes) the new game starts. 

At the beginning, your program should ask several questions about pairs of non-negative integer numbers (x, y). You can only ask the numbers, that satisfy the inequalities 0 ≤ x, y ≤ 2 ⋅ 10^9. To ask a question print "? x y" (without quotes). As the answer, you should read one symbol: 

  * "x" (without quotes), if (x mod a) ≥ (y mod a). 
  * "y" (without quotes), if (x mod a) < (y mod a). 
  * "e" (without quotes) — you asked more than 60 questions. Your program should terminate after reading this string and it will get verdict "Wrong answer". 



After your program asked several questions your program should print the answer in form "! a" (without quotes). You should print the number a satisfying the inequalities 1 ≤ a ≤ 10^9. It's guaranteed that Petya's number a satisfied this condition. After that, the current game will finish.

We recall that your program can't ask more than 60 questions during one game.

If your program doesn't terminate after reading "mistake" (without quotes), "end" (without quotes) or "e" (without quotes), it can get any verdict, because it will continue reading from closed input. Also, if your program prints answer or question in the incorrect format it can get any verdict, too. Be careful.

Don't forget to flush the output after printing questions and answers.

To flush the output, you can use: 

  * fflush(stdout) in C++. 
  * System.out.flush() in Java. 
  * stdout.flush() in Python. 
  * flush(output) in Pascal. 
  * See the documentation for other languages. 



It's guaranteed that you should play at least 1 and no more than 100 games.

Hacks:

In hacks, you can use only one game. To hack a solution with Petya's number a (1 ≤ a ≤ 10^9) in the first line you should write a single number 1 and in the second line you should write a single number a.

Example

Input


start
x
x
start
x
x
y
start
x
x
y
y
end


Output


? 0 0
? 10 1
! 1
? 0 0
? 3 4
? 2 5
! 2
? 2 4
? 2 5
? 3 10
? 9 1
! 3

Note

In the first test, you should play 3 games with Petya's numbers 1, 2 and 3.

In the first game, Petya will answer "x" (without quotes) to any question, because (x mod 1) = 0 for any integer x. 

In the second game, if you will ask pair (0, 0), the answer will be "x" (without quotes), because (0 mod 2) ≥ (0 mod 2). But if you will ask pair (2, 5), the answer will be "y" (without quotes), because (2 mod 2) < (5 mod 2), because (2 mod 2) = 0 and (5 mod 2) = 1.

Source: codeforces | Difficulty: HARD
Tags: Sorting

Constructive algorithms


Solutions:
import sys
while True:
	S = input()
	if S == 'end':
		sys.exit()
	if S == 'mistake':
		sys.exit()
	if S == 'start':
		while True:
			i = 0
			print('?', 0, 1)
			sys.stdout.flush()
			T = input()
			if T == 'x':
				print('!', 1)
				break
			while i < 32:
				print('?', 2 ** i, 2 ** (i + 1))
				sys.stdout.flush()
				T = input()
				if T == 'x':
					b = 2 ** i
					break
				i += 1
			mi = 2 ** i
			ma = 2 ** (i + 1)
			while ma - mi > 1:
				mid = (ma + mi) // 2
				print('?', mi, mid)
				sys.stdout.flush()
				T = input()
				if T == 'x':
					ma = mid
				elif T == 'y':
					mi = mid
				elif T == 'e':
					sys.exit()
			print('!', ma)
			break


import sys

def ask(x, y):
	print('?', x, y)
	return input() == 'y'
while input() == 'start':
	if not ask(0, 1):
		print('! 1')
		continue
	d = 1
	while ask(d, d * 2):
		d *= 2
	r = d
	l = d // 2
	while l + 1 < r:
		m = (l + r) // 2
		if ask(m, m * 2):
			l = m
		else:
			r = m
	print('!', r * 2 if not ask(r * 2 - 1, r * 2) else r * 2 - 1)


while True:
	if input() == 'start':
		print(*['?', 0, 1], flush=True)
		result = input()
		if result == 'x':
			print(*['!', 1], flush=True)
			continue
		i = 0
		while True:
			print(*['?', 2 ** i, 2 ** (i + 1)], flush=True)
			result = input()
			if result == 'y':
				i += 1
			else:
				break
		j = i - 1
		result = 2 ** i
		while j >= 0:
			print(*['?', result, result + 2 ** j], flush=True)
			read = input()
			if read == 'y':
				result = result + 2 ** j
				j = j - 1
			else:
				j = j - 1
		print(*['!', result + 1], flush=True)
	else:
		break


import sys
input = lambda : sys.stdin.readline().rstrip('\r\n')

def main():
	s = input()
	while s == 'start':
		print('?', 0, 1, flush=True)
		v = input()
		i = 0
		while v != 'x':
			print('?', 1 << i, 1 << i + 1, flush=True)
			v = input()
			i += 1
		if i == 0:
			print('!', 1, flush=True)
		else:
			(lo, hi) = ((1 << i - 1) + 1, 1 << i)
			while lo < hi:
				mi = (lo + hi) // 2
				print('?', 1 << i - 1, mi, flush=True)
				if input() == 'x':
					hi = mi
				else:
					lo = mi + 1
			print('!', lo, flush=True)
		s = input()
	return
main()


while True:
	s = input()
	if s != 'start':
		break
	l = -1
	h = -1
	d = 1
	print('? 0 1', flush=True)
	s = input()
	if s == 'x':
		print('! 1', flush=True)
		continue
	while True:
		print('?', d, 2 * d, flush=True)
		s = input()
		if s == 'x':
			l = d + 1
			h = 2 * d
			break
		else:
			d *= 2
	while l < h:
		m = (l + h) // 2
		print('?', m, h, flush=True)
		s = input()
		if s == 'x':
			l = m + 1
		else:
			h = m
	print('!', h, flush=True)


from sys import stdout

def ask(x, y):
	print('?', x, y)
	stdout.flush()
	x = input()
	return x == 'x'

def show_res(res):
	print('!', res)
	stdout.flush()

def prepare_game():
	gm = input()
	if gm[0] != 's':
		exit(0)
INF = int(1000000000.0) + 1

def play():
	L = 0
	R = 1
	while R < INF:
		res = ask(L, R)
		if res:
			break
		else:
			L = R
			R *= 2
	st = L
	while R - L > 1:
		m = (R + L) // 2
		if ask(st, m):
			R = m
		else:
			L = m
	show_res(R)
while True:
	prepare_game()
	play()


while True:
	a = input()
	if a != 'start':
		break
	d = 1
	low = 0
	high = 0
	print('? 0 1')
	o = input()
	if o == 'x':
		print('! 1')
		continue
	while 1:
		print('?', d, 2 * d)
		o = input()
		if o == 'x':
			low = d + 1
			high = 2 * d
			break
		else:
			d = d * 2
	while low < high:
		m = (low + high) // 2
		print('?', m, high)
		o = input()
		if o == 'x':
			low = m + 1
		else:
			high = m
	print('!', high)


import sys
v = sys.stdin.readline().strip()
while v == 'start':
	print('? 0 2')
	sys.stdout.flush()
	ans = sys.stdin.readline().strip()
	if ans == 'x':
		print('? 0 1')
		sys.stdout.flush()
		ans = sys.stdin.readline().strip()
		if ans == 'x':
			print('! 1')
			sys.stdout.flush()
		else:
			print('! 2')
			sys.stdout.flush()
	else:
		i = 2
		j = 4
		while ans == 'y':
			print('? ' + str(i) + ' ' + str(j))
			sys.stdout.flush()
			i = i * 2
			j = j * 2
			ans = sys.stdin.readline().strip()
		i = i // 2
		j = j // 2
		while i != j and i + 1 != j:
			print('? ' + str(i) + ' ' + str((j + i) // 2))
			sys.stdout.flush()
			ans = sys.stdin.readline().strip()
			if ans == 'x':
				j = (i + j) // 2
			else:
				i = (i + j) // 2
		print('! ' + str(i + 1))
		sys.stdout.flush()
	v = sys.stdin.readline().strip()


import sys

def rli():
	return list(map(int, input().split()))

def solve():
	cache = {}

	def guess(x, y):
		if (x, y) not in cache:
			print('? {} {}'.format(x, y))
			sys.stdout.flush()
			res = input()
			cache[x, y] = res
		return cache[x, y]
	(st, ed) = (1, 2)
	while guess(st, ed) == 'y':
		(st, ed) = (ed, ed + ed)
	if st == 1 and ed == 2 and (guess(2, 3) == 'x'):
		print('! 1')
		return
	x = 1 << 32
	while x:
		if ed - x > st and guess(st, ed - x) == 'x':
			ed -= x
		x >>= 1
	print('! {}'.format(ed))

def main():
	while True:
		s = input()
		if s == 'start':
			solve()
		else:
			break
main()


while True:
	if input() != 'start':
		break
	x = 0
	y = 2
	print('?', x, y)
	if input() == 'x':
		print('?', 0, 1)
		if input() == 'x':
			print('!', 1)
		else:
			print('!', 2)
	else:
		x = y
		y *= 2
		while True:
			print('?', x, y)
			if input() == 'x':
				break
			x = y
			y *= 2
		l = x
		r = y
		while True:
			if r - l == 1:
				print('!', r)
				break
			if r > 10 ** 9 and l > 9 * 10 ** 8:
				d = r - 10 ** 9
				r -= d
				l -= d
			print('?', r, l + r)
			if input() == 'x':
				r = (l + r) // 2
			else:
				l = (l + r) // 2


while True:
	s = input()
	if s == 'end':
		break
	if s == 'start':
		a = 0
		b = 1
		print('?', a, b, flush=True)
		s = input()
		if s == 'x':
			print('!', 1, flush=True)
			continue
		a = 1
		b = 2
		print('?', a, b, flush=True)
		s = input()
		while s == 'y':
			a <<= 1
			b <<= 1
			print('?', a, b, flush=True)
			s = input()
		syo = a
		dai = b
		while dai - syo > 1:
			print('?', syo, (syo + dai) // 2, flush=True)
			s = input()
			if s == 'x':
				dai = (syo + dai) // 2
			else:
				syo = (syo + dai) // 2
		print('!', dai, flush=True)


import sys

def question(x, y, a):
	if x % a >= y % a:
		return 'x'
	else:
		return 'y'

def real_question(x, y):
	print('? {0} {1}'.format(x, y))
	sys.stdout.flush()
	return input()

class CodeforcesTask1103BSolution:

	def __init__(self):
		self.result = ''

	def read_input(self):
		pass

	def process_task(self):
		while True:
			cmd = input()
			if cmd == 'start':
				q_res = 'y'
				x = 0
				qus = 0
				while q_res != 'x':
					qus += 1
					q_res = real_question(2 ** x, 2 ** (x + 1))
					l = 2 ** x
					r = 2 ** (x + 1)
					x += 1
				if r == 2:
					q_res = real_question(2, 1)
					if q_res == 'x':
						print('! 1')
						sys.stdout.flush()
					else:
						print('! 2')
						sys.stdout.flush()
				else:
					mid = l + (r - l) // 2
					l0 = l
					found = False
					following = False
					r += 2
					while not found:
						qus += 1
						q_res = real_question(l0, mid)
						if q_res == 'y':
							l = mid
							mid += (r - l) // 2
						else:
							r = mid
							mid -= (r - l) // 2
						if r == mid:
							found = True
						elif mid + 1 == r and following > 1:
							found = True
						elif mid + 1 == r:
							following += 1
					print('! {0}'.format(r))
					sys.stdout.flush()
			elif cmd == 'mistake':
				print('error')
				break
			else:
				break

	def get_result(self):
		return self.result
Solution = CodeforcesTask1103BSolution()
Solution.read_input()
Solution.process_task()
print(Solution.get_result())


from sys import exit

def ask(x, y):
	print(f'? {x} {y}', flush=True)
	result = input().strip()
	if result == 'e':
		exit()
	return result == 'x'

def start():
	mx = 1
	for i in range(31):
		if ask(2 ** i, 2 ** i * 2):
			mx = 2 ** i
			break
	if mx == 1:
		if ask(2, 1):
			print('! 1', flush=True)
		else:
			print('! 2', flush=True)
		return
	(lo, hi) = (mx + 1, mx * 2)
	while lo < hi:
		mid = (lo + hi) // 2
		if ask(mid, hi):
			lo = mid + 1
		else:
			hi = mid
	print(f'! {lo}', flush=True)

def game():
	s = input().strip()
	if s == 'start':
		start()
	else:
		exit()
while True:
	game()


a = input()
while a != 'end':
	if a == 'start':
		for i in range(30):
			print('?', 2 ** i, 2 * 2 ** i)
			if input() == 'x':
				break
		bot = 2 ** i
		top = min(2 ** (i + 1), 1000000000)
		if bot == 1:
			print('?', 2, 1)
			if input() == 'x':
				print('!', 1)
			else:
				print('!', 2)
		else:
			bot += 1
			while top != bot:
				mid = (bot + top) // 2
				print('?', 2 * mid, mid)
				if input() == 'x':
					top = mid
				else:
					bot = mid + 1
			print('!', top)
	a = input()


def main():
	s = input()
	while s == 'start':
		print('?', 0, 1)
		v = input()
		i = 0
		while v != 'x':
			print('?', 1 << i, 1 << i + 1)
			v = input()
			i += 1
		if i == 0:
			print('!', 1)
		else:
			(lo, hi) = ((1 << i - 1) + 1, 1 << i)
			while lo < hi:
				mi = (lo + hi) // 2
				print('?', 1 << i - 1, mi)
				if input() == 'x':
					hi = mi
				else:
					lo = mi + 1
			print('!', lo)
		s = input()
	return
main()


from sys import stdout

def ask(x, y):
	print('?', x, y)
	stdout.flush()
	return input() == 'x'

def work():
	if ask(0, 1):
		return 1
	l = 1
	while ask(l * 2, l):
		l *= 2
	r = min(1000000000, l * 2 + 1)
	l += 1
	while r > l:
		mid = (l + r) // 2
		if ask(mid, (mid + 1) // 2):
			l = mid + 1
		else:
			r = mid
	return l
while input() == 'start':
	print('!', work())
	stdout.flush()


def get_range():
	left = 0
	right = 1
	while True:
		print('?', left, right)
		in_value = input()
		if in_value == 'x':
			break
		left = right
		right *= 2
	return (left, right)

def solve():
	in_value = input()
	while in_value == 'start':
		(left, right) = get_range()
		while left != right:
			middle = (right + left) // 2
			if left == middle:
				break
			print('?', left, middle)
			in_value = input()
			if in_value == 'y':
				left = middle
			if in_value == 'x':
				right = middle
		print('!', left + 1)
		in_value = input()
solve()


from sys import stdout

def query(x, y):
	print('?', x, y)
	stdout.flush()
	reply = input()
	if reply == 'e':
		exit()
	return reply
while True:
	if input() != 'start':
		exit()
	x = 0
	y = 1
	while True:
		reply = query(x, y)
		if reply == 'y':
			x = y
			y *= 2
		else:
			break
	ans = 0
	x += 1
	while x < y:
		m = int((x + y) / 2)
		reply = query(m, y)
		if reply == 'x':
			x = m + 1
		else:
			y = m
	print('!', x)
	stdout.flush()


def f(a=-1):
	s = input()
	if s == 'end':
		return False
	(y, x) = (1, 2)
	count = 0

	def oracle(x, y):
		nonlocal count
		count += 1
		if a == -1:
			print('?', x, y)
			return input()
		elif x % a >= y % a:
			return 'x'
		else:
			return 'y'
	while True:
		if y > 2 * 10 ** 9 or x > 2 * 10 ** 9:
			print('!', 1)
			return True
		s = oracle(x, y)
		if s == 'x':
			pass
			x *= 2
			y *= 2
		else:
			break
	while y < x - 1:
		m = (y + x) // 2
		s = oracle(m, y)
		if s == 'x':
			y = m
		else:
			x = m
	print('!', x)
	return True
while f():
	pass