#include <bits/stdc++.h>
using namespace std;
int T1, L1, B1, R1;
int T2, L2, B2, R2;
int query(int x1, int y1, int x2, int y2) {
  cout << "? " << x1 << ' ' << y1 << ' ' << x2 << ' ' << y2 << endl;
  int ans;
  cin >> ans;
  if (x1 <= T1 && B1 <= x2 && y1 <= L1 && R1 <= y2) ans--;
  if (x1 <= T2 && B2 <= x2 && y1 <= L2 && R2 <= y2) ans--;
  return ans;
}
void find(int gt, int gl, int gb, int gr, int &T, int &L, int &B, int &R) {
  int l, r;
  l = gt, r = gb;
  while (l < r) {
    int m = (l + r) / 2;
    if (query(gt, gl, m, gr)) {
      r = m;
    } else {
      l = m + 1;
    }
  }
  B = l;
  l = gt, r = B;
  while (l < r) {
    int m = (l + r) / 2 + 1;
    if (query(m, gl, B, gr)) {
      l = m;
    } else {
      r = m - 1;
    }
  }
  T = l;
  l = gl, r = gr;
  while (l < r) {
    int m = (l + r) / 2;
    if (query(T, gl, B, m)) {
      r = m;
    } else {
      l = m + 1;
    }
  }
  R = l;
  l = gl, r = R;
  while (l < r) {
    int m = (l + r) / 2 + 1;
    if (query(T, m, B, R)) {
      l = m;
    } else {
      r = m - 1;
    }
  }
  L = l;
  return;
}
int main() {
  int n;
  cin >> n;
  int l = 1, r = n;
  while (l < r) {
    int m = (l + r) / 2;
    if (query(1, 1, m, n))
      r = m;
    else
      l = m + 1;
  }
  if (query(1, 1, l, n) == 1) {
    cerr << "horisontal " << l << endl;
    find(1, 1, l, n, T1, L1, B1, R1);
    find(1, 1, n, n, T2, L2, B2, R2);
    cout << "! " << T1 << ' ' << L1 << ' ' << B1 << ' ' << R1 << ' ' << T2
         << ' ' << L2 << ' ' << B2 << ' ' << R2 << endl;
    return 0;
  }
  l = 1, r = n;
  while (l < r) {
    int m = (l + r) / 2;
    if (query(1, 1, n, m))
      r = m;
    else
      l = m + 1;
  }
  cerr << "vertical " << l << endl;
  find(1, 1, n, l, T1, L1, B1, R1);
  find(1, 1, n, n, T2, L2, B2, R2);
  cout << "! " << T1 << ' ' << L1 << ' ' << B1 << ' ' << R1 << ' ' << T2 << ' '
       << L2 << ' ' << B2 << ' ' << R2 << endl;
}
