#include <bits/stdc++.h>
using namespace std;
bool h = true;
int X11, Y11, X12, Y12, X21, Y21, X22, Y22;
vector<int> v;
int find(int x1, int y1, int x2, int y2) {
#pragma warning(disable : 4996)
  int k;
  printf("? %d %d %d %d\n", x1, y1, x2, y2);
  fflush(stdout);
  scanf("%d", &k);
  return k;
}
void find1(int x1, int y1, int x2, int y2) {
  int l, r;
  r = x2 + 1;
  l = x1;
  while (r - l > 1) {
    int m = (r + l) / 2;
    if (find(m, y1, x2, y2) == 1)
      l = m;
    else
      r = m;
  }
  v.push_back(l);
  r = y2 + 1;
  l = y1;
  while (r - l > 1) {
    int m = (r + l) / 2;
    if (find(x1, m, x2, y2) == 1)
      l = m;
    else
      r = m;
  }
  v.push_back(l);
  r = x2;
  l = x1 - 1;
  while (r - l > 1) {
    int m = (r + l) / 2;
    if (find(x1, y1, m, y2) == 1)
      r = m;
    else
      l = m;
  }
  v.push_back(r);
  r = y2;
  l = y1 - 1;
  while (r - l > 1) {
    int m = (r + l) / 2;
    if (find(x1, y1, x2, m) == 1)
      r = m;
    else
      l = m;
  }
  v.push_back(r);
}
void qwe(int n) {
  int l = 0;
  int r = n;
  while (r - l > 1) {
    int m = (r + l) / 2;
    if (find(1, 1, n, m) > 0)
      r = m;
    else
      l = m;
  }
  if (r < n) {
    if (find(1, r + 1, n, n) > 0) {
      find1(1, 1, n, r);
      find1(1, r + 1, n, n);
    } else {
      int l = 0;
      int r = n;
      while (r - l > 1) {
        int m = (r + l) / 2;
        if (find(1, 1, m, n) > 0)
          r = m;
        else
          l = m;
      }
      find1(1, 1, r, n);
      find1(r + 1, 1, n, n);
    }
  } else {
    int l = 0;
    int r = n;
    while (r - l > 1) {
      int m = (r + l) / 2;
      if (find(1, 1, m, n) > 0)
        r = m;
      else
        l = m;
    }
    find1(1, 1, r, n);
    find1(r + 1, 1, n, n);
  }
}
int main() {
#pragma warning(disable : 4996)
  int n, k, x11, y11, x12, y12, x21, y21, x22, y22;
  scanf("%d", &n);
  qwe(n);
  printf("! ");
  printf("%d %d %d %d %d %d %d %d", v[0], v[1], v[2], v[3], v[4], v[5], v[6],
         v[7]);
  cout.flush();
  return 0;
}
