import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;

public class DD {
	public static void main(String[] args) throws Exception {
		solve();
	}

	// **SOLUTION**
	public static void solve() throws Exception {
		int bit = 10;
		int preA = 0, preB = 0;
		for (int i = 0; i < 62;) {
			int a1 = preA + (int) Math.pow(2, bit);
			int a0 = preA;
			int b1 = preB + (int) Math.pow(2, bit);
			int b0 = preB;
			
			q(a1, b0, true);
			int x = sc.nextInt();
			i++;

			if (x == 0) {
				q(a0, b0, true);
				int n = sc.nextInt();
				if (n == 1) {
					preA = preA + (int) Math.pow(2, bit);
					preB = preB + 0;
				} else {
					preB = preB + (int) Math.pow(2, bit);
					preA = preA + 0;
				}
				continue;
			}

			q(a0, b1, true);
			int y = sc.nextInt();
			i++;
			
			if (x == 1 && y == 1) {
				preA = preA + (int) Math.pow(2, bit);
				preB = preB + 0;
			} else if (x == -1 && y == -1) {
				preB = preB + (int) Math.pow(2, bit);
				preA = preA + 0;
			} else if (x == 1 && y == -1) {
				preA = preA + 0;
				preB = preB + 0;
			} else if (x == -1 && y == -1) {
				preA = preA + (int) Math.pow(2, bit);
				preB = preB + (int) Math.pow(2, bit);
			}

			bit--;
		}
		q(preA, preB, false);
	}

	private static void q(int i, int j, boolean isQ) {
		System.out.println(((isQ) ? "? " : "! ") + i + " " + j);
		System.out.flush();
	}

	public static InputStreamReader r = new InputStreamReader(System.in);

	public static BufferedReader br = new BufferedReader(r);

	public static Scanner sc = new Scanner(System.in);
}
