#include <bits/stdc++.h>
using namespace std;
int lx1, ly1, lx2, ly2;
bool have(int x1, int y1, int x2, int y2) {
  cout << '?' << ' ' << x1 << ' ' << y1 << ' ' << x2 << ' ' << y2 << endl;
  cout << flush;
  int x;
  cin >> x;
  if (lx1 && x1 <= lx1 && x2 >= lx2 && y1 <= ly1 && y2 >= ly2) x--;
  return x;
}
void Find(int n) {
  int mid;
  int x1 = 1, x2 = n, y1 = 1, y2 = n;
  int b = 0;
  while (x2 - b > 1) {
    mid = (b + x2) / 2;
    (have(x1, y1, mid, y2) ? x2 : b) = mid;
  }
  b = x2 + 1;
  while (b - x1 > 1) {
    mid = (x1 + b) / 2;
    (have(mid, y1, x2, y2) ? x1 : b) = mid;
  }
  b = 0;
  while (y2 - b > 1) {
    mid = (b + y2) / 2;
    (have(x1, y1, x2, mid) ? y2 : b) = mid;
  }
  b = y2 + 1;
  while (b - y1 > 1) {
    mid = (y1 + b) / 2;
    (have(x1, mid, x2, y2) ? y1 : b) = mid;
  }
  if (lx1) {
    cout << '!' << ' ' << lx1 << ' ' << ly1 << ' ' << lx2 << ' ' << ly2 << ' '
         << x1 << ' ' << y1 << ' ' << x2 << ' ' << y2 << endl;
    cout << flush;
  } else
    lx1 = x1, ly1 = y1, lx2 = x2, ly2 = y2;
}
int main() {
  ios::sync_with_stdio(false);
  int n;
  cin >> n;
  Find(n);
  Find(n);
  return 0;
}
