#include <bits/stdc++.h>
int main() {
  int n, flag;
  int i = 1 << 29;
  printf("? 0 0\n");
  fflush(stdout);
  scanf("%d", &n);
  int a = 0, b = 0;
  if (n < 0) {
    flag = -1;
  } else if (n > 0) {
    flag = 1;
  } else {
    flag = 0;
  }
  while (i) {
    switch (flag) {
      case 1:
        if (n < 0) {
          a += i << 1;
          flag = -1;
          printf("? %d %d\n", a, i + b);
        } else if (n > 0) {
          printf("? %d %d\n", i + a, b);
        } else {
          a += i << 1;
          flag = 0;
          printf("? %d %d\n", i + a, b);
        }
        break;
      case 0:
        if (n < 0) {
          a += i << 1;
          b += i << 1;
          printf("? %d %d\n", i + a, b);
        } else if (n > 0 || i == 1 << 29) {
          flag = 1;
          printf("? %d %d\n", i + a, b);
        } else {
          a += i << 1;
          printf("? %d %d\n", i + a, b);
        }
        break;
      default:
        if (n < 0) {
          printf("? %d %d\n", a, b + i);
        } else if (n > 0) {
          b += i << 1;
          flag = 0;
          printf("? %d %d\n", i + a, b);
        } else {
          b += i << 1;
          flag = 0;
          printf("? %d %d\n", i + a, b);
        }
        break;
    }
    fflush(stdout);
    scanf("%d", &n);
    i /= 2;
  }
  printf("! %d %d\n", a, b);
  fflush(stdout);
  return 0;
}
