#include <bits/stdc++.h>
using namespace std;
struct rec {
  int x1, y1, x2, y2;
  rec() {}
  rec(int x1, int y1, int x2, int y2) : x1(x1), y1(y1), x2(x2), y2(y2) {}
};
vector<rec> pre;
int n;
inline int query(int x1, int y1, int x2, int y2) {
  if (x1 > x2 || y1 > y2) return 0;
  printf("? %d %d %d %d\n", x1, y1, x2, y2);
  fflush(stdout);
  int ans;
  scanf("%d", &ans);
  return ans;
}
inline void init() {
  int x = 0, y = n + 1;
  while (x < y) {
    int mid = x + ((y - x) >> 1);
    int ans1 = query(1, 1, mid, n);
    int ans2 = query(1 + mid, 1, n, n);
    if (ans1 == 1 && ans2 == 1) {
      pre.push_back(rec(1, 1, mid, n));
      pre.push_back(rec(1 + mid, 1, n, n));
      return;
    } else if (!ans1 && !ans2)
      break;
    else if (ans1)
      y = mid;
    else if (ans2)
      x = mid + 1;
  }
  if (pre.size() < 2) {
    x = 0, y = n + 1;
    while (x < y) {
      int mid = x + ((y - x) >> 1);
      int ans1 = query(1, 1, n, mid);
      int ans2 = query(1, mid + 1, n, n);
      if (ans1 == 1 && ans2 == 1) {
        pre.push_back(rec(1, 1, n, mid));
        pre.push_back(rec(1, mid + 1, n, n));
        return;
      } else if (!ans1 && !ans2)
        break;
      else if (ans1)
        y = mid;
      else if (ans2)
        x = mid + 1;
    }
  }
}
inline void solve(int x1, int y1, int x2, int y2) {
  int u, d, l, r;
  int x = 0, y = y2 - y1 + 2;
  while (x < y) {
    int mid = x + ((y - x) >> 1);
    int ans = query(x1, y1, x2, y1 + mid - 1);
    if (ans == 1)
      y = mid;
    else
      x = mid + 1;
  }
  u = y1 + x - 1;
  x = 0, y = y2 - y1 + 2;
  while (x < y) {
    int mid = x + ((y - x) >> 1);
    int ans = query(x1, y1 + mid, x2, y2);
    if (ans == 0)
      y = mid;
    else
      x = mid + 1;
  }
  d = y1 + x - 1;
  x = 0, y = x2 - x1 + 2;
  while (x < y) {
    int mid = x + ((y - x) >> 1);
    int ans = query(x1 + mid, y1, x2, y2);
    if (!ans)
      y = mid;
    else
      x = mid + 1;
  }
  l = x1 + x - 1;
  x = 0, y = x2 - x1 + 2;
  while (x < y) {
    int mid = x + ((y - x) >> 1);
    int ans = query(x1, y1, x1 + mid - 1, y2);
    if (ans == 1)
      y = mid;
    else
      x = mid + 1;
  }
  r = x1 + x - 1;
  pre.push_back(rec(l, d, r, u));
}
int main(void) {
  scanf("%d", &n);
  init();
  solve(pre[0].x1, pre[0].y1, pre[0].x2, pre[0].y2);
  solve(pre[1].x1, pre[1].y1, pre[1].x2, pre[1].y2);
  printf("! %d %d %d %d %d %d %d %d\n", pre[2].x1, pre[2].y1, pre[2].x2,
         pre[2].y2, pre[3].x1, pre[3].y1, pre[3].x2, pre[3].y2);
  fflush(stdout);
}
