#include <bits/stdc++.h>
using namespace std;
int n;
map<vector<int>, int> cache;
int query(int x1, int y1, int x2, int y2) {
  vector<int> q{x1, y1, x2, y2};
  if (cache.count(q)) return cache[q];
  if (x1 > x2 || y1 > y2) return cache[q] = 0;
  printf("? %d %d %d %d\n", x1, y1, x2, y2);
  fflush(stdout);
  int res;
  scanf("%d", &res);
  cache[q] = res;
  return res;
}
vector<int> getRec(int x1, int y1, int x2, int y2) {
  int l, r, mid;
  l = x1, r = n;
  while (l <= r) {
    mid = l + r >> 1;
    if (query(mid, y1, x2, y2))
      l = mid + 1;
    else
      r = mid - 1;
  }
  x1 = r;
  l = 1, r = x2;
  while (l <= r) {
    mid = l + r >> 1;
    if (query(x1, y1, mid, y2))
      r = mid - 1;
    else
      l = mid + 1;
  }
  x2 = l;
  l = y1, r = n;
  while (l <= r) {
    mid = l + r >> 1;
    if (query(x1, mid, x2, y2))
      l = mid + 1;
    else
      r = mid - 1;
  }
  y1 = r;
  l = 1, r = y2;
  while (l <= r) {
    mid = l + r >> 1;
    if (query(x1, y1, x2, mid))
      r = mid - 1;
    else
      l = mid + 1;
  }
  y2 = l;
  return vector<int>({x1, y1, x2, y2});
}
int main() {
  scanf("%d", &n);
  int lx = 1, rx = n;
  while (lx <= rx) {
    int mid = lx + rx >> 1;
    if (query(1, 1, mid, n) >= query(mid + 1, 1, n, n))
      rx = mid - 1;
    else
      lx = mid + 1;
  }
  int x11, y11, x12, y12, x21, y21, x22, y22;
  int s1 = query(1, 1, lx, n), s2 = query(lx + 1, 1, n, n);
  if (s1 && s2 && s1 == s2) {
    x11 = 1;
    y11 = 1;
    x12 = lx;
    y12 = n;
    x21 = lx + 1;
    y21 = 1;
    x22 = n;
    y22 = n;
  } else {
    cerr << "br2 ";
    int ly = 1, ry = n;
    while (ly <= ry) {
      int mid = ly + ry >> 1;
      if (query(1, 1, n, mid) >= query(1, mid + 1, n, n))
        ry = mid - 1;
      else
        ly = mid + 1;
    }
    x11 = 1;
    y11 = 1;
    x12 = n;
    y12 = ly;
    x21 = 1;
    y21 = ly + 1;
    x22 = n;
    y22 = n;
  }
  vector<int> rec1(getRec(x11, y11, x12, y12));
  vector<int> rec2(getRec(x21, y21, x22, y22));
  printf("!");
  for (auto t : rec1) printf(" %d", t);
  for (auto t : rec2) printf(" %d", t);
  puts("");
  fflush(stdout);
}
