#include <bits/stdc++.h>
using namespace std;
bool h = true;
int l, r, m;
vector<int> v;
int sch(int x1, int y1, int x2, int y2) {
#pragma warning(disable : 4996)
  int k;
  if (h)
    printf("? %d %d %d %d\n", x1, y1, x2, y2);
  else
    printf("? %d %d %d %d\n", y1, x1, y2, x2);
  cout.flush();
  scanf("%d", &k);
  return k;
}
void findrec(int x1, int y1, int x2, int y2) {
  l = y1 - 1;
  r = y2;
  while (r - l > 1) {
    m = (l + r) / 2;
    if (sch(x1, y1, x2, m) >= 1)
      r = m;
    else
      l = m;
  }
  y2 = r;
  l = y1;
  r = y2 + 1;
  while (r - l > 1) {
    m = (l + r) / 2;
    if (sch(x1, m, x2, y2) >= 1)
      l = m;
    else
      r = m;
  }
  y1 = l;
  l = x1 - 1;
  r = x2;
  while (r - l > 1) {
    m = (l + r) / 2;
    if (sch(x1, y1, m, y2) >= 1)
      r = m;
    else
      l = m;
  }
  x2 = r;
  l = x1;
  r = x2 + 1;
  while (r - l > 1) {
    m = (l + r) / 2;
    if (sch(m, y1, x2, y2) >= 1)
      l = m;
    else
      r = m;
  }
  x1 = l;
  if (h) {
    v.push_back(x1);
    v.push_back(y1);
    v.push_back(x2);
    v.push_back(y2);
  } else {
    v.push_back(y1);
    v.push_back(x1);
    v.push_back(y2);
    v.push_back(x2);
  }
}
bool qwe(int n) {
  int l, r, m;
  l = 0;
  r = n;
  while (r - l > 1) {
    m = (l + r) / 2;
    if (sch(1, 1, n, m) > 0)
      r = m;
    else
      l = m;
  }
  if (r < n && sch(1, r + 1, n, n) > 0) {
    findrec(1, r + 1, n, n);
    findrec(1, 1, n, r);
    return true;
  }
  return false;
}
int main() {
#pragma warning(disable : 4996)
  int i, n;
  scanf("%d", &n);
  if (!qwe(n)) {
    h = false;
    qwe(n);
  }
  cout << "! ";
  for (i = 0; i < 8; i++) printf("%d ", v[i]);
  cout.flush();
  return 0;
}
