#include <bits/stdc++.h>
using namespace std;
int n;
int r[1011], c[1011];
vector<pair<int, int> > ans;
int o(int x1, int y1, int x2, int y2) {
  printf("? %d %d %d %d\n", x1, y1, x2, y2);
  fflush(stdout);
  int res;
  scanf("%d", &res);
  return res;
}
void chk(int x, int y) {
  int v = o(x, y, x, y);
  if (v == 1) ans.push_back(make_pair(x, y));
}
int main() {
  scanf("%d", &n);
  int r_lef = -1, r_rig = -1;
  for (int i = 1; i < n; i++) {
    r[i] = o(1, 1, i, n);
    if (r[i] % 2) {
      if (r_lef < 0) r_lef = i;
      r_rig = i;
    }
  }
  int c_lef = -1, c_rig = -1;
  for (int i = 1; i < n; i++) {
    c[i] = o(1, 1, n, i);
    if (c[i] % 2) {
      if (c_lef < 0) c_lef = i;
      c_rig = i;
    }
  }
  ans.clear();
  if (r_lef > 0 && c_lef > 0) {
    chk(r_lef, c_lef);
    chk(r_lef, c_rig + 1);
    chk(r_rig + 1, c_lef);
    chk(r_rig + 1, c_rig + 1);
  } else if (r_lef < 0) {
    int lo = 1, hi = n, a = 0;
    while (lo <= hi) {
      int mi = (lo + hi) / 2;
      int res = o(1, 1, mi, c_lef);
      if (res % 2) {
        a = mi;
        hi = mi - 1;
      } else
        lo = mi + 1;
    }
    ans.push_back(make_pair(a, c_lef));
    ans.push_back(make_pair(a, c_rig + 1));
  } else {
    int lo = 1, hi = n, a = 0;
    while (lo <= hi) {
      int mi = (lo + hi) / 2;
      int res = o(1, 1, r_lef, mi);
      if (res % 2) {
        a = mi;
        hi = mi - 1;
      } else
        lo = mi + 1;
    }
    ans.push_back(make_pair(r_lef, a));
    ans.push_back(make_pair(r_rig + 1, a));
  }
  printf("! %d %d %d %d\n", ans[0].first, ans[0].second, ans[1].first,
         ans[1].second);
  return 0;
}
