#include <bits/stdc++.h>
using namespace std;
const int dx[] = {-1, 1, 0, 0, -1, -1, 1, 1},
          dy[] = {0, 0, -1, 1, -1, 1, -1, 1};
const double EPS = 1e-9;
const int INF = 0x7fffffff;
const int MOD = 1000000007;
const int N = 1010;
int n;
int query(const int& x1, const int& y1, const int& x2, const int& y2) {
  if (x1 > x2 || y1 > y2) return -1;
  int res;
  printf("? %d %d %d %d\n", x1, y1, x2, y2);
  fflush(stdout);
  scanf("%d", &res);
  return res;
}
void print(const int& x11, const int& y11, const int& x12, const int& y12,
           const int& x21, const int& y21, const int& x22, const int& y22) {
  printf("! %d %d %d %d %d %d %d %d\n", x11, y11, x12, y12, x21, y21, x22, y22);
  fflush(stdout);
}
int leftBinSearch(int val) {
  int l, r, mid, res;
  l = res = 1;
  r = n;
  while (l <= r) {
    mid = (l + r) >> 1;
    if (query(mid, 1, n, n) >= val) {
      res = max(res, mid);
      l = mid + 1;
    } else
      r = mid - 1;
  }
  return res;
}
int rightBinSearch(int val) {
  int l, r, mid, res;
  l = 1;
  r = res = n;
  while (l <= r) {
    mid = (l + r) >> 1;
    if (query(1, 1, mid, n) >= val) {
      res = min(res, mid);
      r = mid - 1;
    } else
      l = mid + 1;
  }
  return res;
}
int upBinSearch(int val) {
  int u, d, mid, res;
  u = res = 1;
  d = n;
  while (u <= d) {
    mid = (u + d) >> 1;
    if (query(1, mid, n, n) >= val) {
      res = max(res, mid);
      u = mid + 1;
    } else
      d = mid - 1;
  }
  return res;
}
int downBinSearch(int val) {
  int u, d, mid, res;
  u = 1;
  d = res = n;
  while (u <= d) {
    mid = (u + d) >> 1;
    if (query(1, 1, n, mid) >= val) {
      res = min(res, mid);
      d = mid - 1;
    } else
      u = mid + 1;
  }
  return res;
}
void solve() {
  int l1, l2, r1, r2;
  int u1, u2, d1, d2;
  scanf("%d", &n);
  l1 = leftBinSearch(2);
  l2 = leftBinSearch(1);
  r1 = rightBinSearch(2);
  r2 = rightBinSearch(1);
  u1 = upBinSearch(2);
  u2 = upBinSearch(1);
  d1 = downBinSearch(2);
  d2 = downBinSearch(1);
  if (query(l1, u1, r1, d1) == 1 && query(l2, u2, r2, d2) == 1)
    print(l1, u1, r1, d1, l2, u2, r2, d2);
  else if (query(l1, u1, r1, d2) == 1 && query(l2, u2, r2, d1) == 1)
    print(l1, u1, r1, d2, l2, u2, r2, d1);
  else if (query(l1, u2, r1, d1) == 1 && query(l2, u1, r2, d2) == 1)
    print(l1, u2, r1, d1, l2, u1, r2, d2);
  else if (query(l1, u2, r1, d2) == 1 && query(l2, u1, r2, d1) == 1)
    print(l1, u2, r1, d2, l2, u1, r2, d1);
  else if (query(l1, u1, r2, d1) == 1 && query(l2, u2, r1, d2) == 1)
    print(l1, u1, r2, d1, l2, u2, r1, d2);
  else if (query(l1, u1, r2, d2) == 1 && query(l2, u2, r1, d1) == 1)
    print(l1, u1, r2, d2, l2, u2, r1, d1);
  else if (query(l1, u2, r2, d1) == 1 && query(l2, u1, r1, d2) == 1)
    print(l1, u2, r2, d1, l2, u1, r1, d2);
  else if (query(l1, u2, r2, d2) == 1 && query(l2, u1, r1, d1) == 1)
    print(l1, u2, r2, d2, l2, u1, r1, d1);
}
int main() {
  solve();
  return 0;
}
