#include <bits/stdc++.h>
using namespace std;
void find2(unsigned long long &x1, unsigned long long &y1,
           unsigned long long &x2, unsigned long long &y2) {
  unsigned long long l = x1, r = x2;
  while (l <= r) {
    unsigned long long m = (l + r) / 2;
    cout << "? " << m << ' ' << y1 << ' ' << x2 << ' ' << y2 << '\n';
    unsigned long long t;
    cin >> t;
    if (t == 2) {
      x1 = m;
      l = m + 1;
    } else
      r = m - 1;
  }
  l = y1, r = y2;
  while (l <= r) {
    unsigned long long m = (l + r) / 2;
    cout << "? " << x1 << ' ' << m << ' ' << x2 << ' ' << y2 << '\n';
    unsigned long long t;
    cin >> t;
    if (t == 2) {
      y1 = m;
      l = m + 1;
    } else
      r = m - 1;
  }
  l = x1, r = x2;
  while (l <= r) {
    unsigned long long m = (l + r) / 2;
    cout << "? " << x1 << ' ' << y1 << ' ' << m << ' ' << y2 << '\n';
    unsigned long long t;
    cin >> t;
    if (t == 2) {
      x2 = m;
      r = m - 1;
    } else
      l = m + 1;
  }
  l = y1, r = y2;
  while (l <= r) {
    unsigned long long m = (l + r) / 2;
    cout << "? " << x1 << ' ' << y1 << ' ' << x2 << ' ' << m << '\n';
    unsigned long long t;
    cin >> t;
    if (t == 2) {
      y2 = m;
      r = m - 1;
    } else
      l = m + 1;
  }
}
void find1(unsigned long long &x1, unsigned long long &y1,
           unsigned long long &x2, unsigned long long &y2) {
  unsigned long long l = y1, r = y2;
  while (l <= r) {
    unsigned long long m = (l + r) / 2;
    cout << "? " << x1 << ' ' << y1 << ' ' << x2 << ' ' << m << '\n';
    unsigned long long t;
    cin >> t;
    if (t == 1) {
      y2 = m;
      r = m - 1;
    } else
      l = m + 1;
  }
  l = x1, r = x2;
  while (l <= r) {
    unsigned long long m = (l + r) / 2;
    cout << "? " << x1 << ' ' << y1 << ' ' << m << ' ' << y2 << '\n';
    unsigned long long t;
    cin >> t;
    if (t == 1) {
      x2 = m;
      r = m - 1;
    } else
      l = m + 1;
  }
  l = x1, r = x2;
  while (l <= r) {
    unsigned long long m = (l + r) / 2;
    cout << "? " << m << ' ' << y1 << ' ' << x2 << ' ' << y2 << '\n';
    unsigned long long t;
    cin >> t;
    if (t == 1) {
      x1 = m;
      l = m + 1;
    } else
      r = m - 1;
  }
  l = y1, r = y2;
  while (l <= r) {
    unsigned long long m = (l + r) / 2;
    cout << "? " << x1 << ' ' << m << ' ' << x2 << ' ' << y2 << '\n';
    unsigned long long t;
    cin >> t;
    if (t == 1) {
      y1 = m;
      l = m + 1;
    } else
      r = m - 1;
  }
}
void solve() {
  unsigned long long n;
  cin >> n;
  unsigned long long x1 = 1, y1 = 1, x2 = n, y2 = n;
  find2(x1, y1, x2, y2);
  unsigned long long x1l = x1, y1l = y1, x2l = x2, y2l = y2;
  find1(x1l, y1l, x2l, y2l);
  unsigned long long x1r, y1r, x2r, y2r;
  if (x1 == x1l)
    x1r = x2l + 1, y1r = y1, x2r = x2, y2r = y2;
  else
    x1r = x1, y1r = y1, x2r = x1l - 1, y2r = y2;
  unsigned long long t = 0;
  if (x1r <= x2r && y1r <= y2r) {
    cout << "? " << x1r << ' ' << y1r << ' ' << x2r << ' ' << y2r << '\n';
    cin >> t;
  }
  if (t == 1) {
    find1(x1r, y1r, x2r, y2r);
    cout << "! ";
    cout << x1l << ' ' << y1l << ' ' << x2l << ' ' << y2l << ' ';
    cout << x1r << ' ' << y1r << ' ' << x2r << ' ' << y2r << '\n';
    fflush(stdout);
  } else {
    unsigned long long x1m = x1, y1m = y2l + 1, x2m = x2, y2m = y2;
    find1(x1m, y1m, x2m, y2m);
    cout << "! ";
    cout << x1l << ' ' << y1l << ' ' << x2l << ' ' << y2l << ' ';
    cout << x1m << ' ' << y1m << ' ' << x2m << ' ' << y2m << '\n';
    fflush(stdout);
  }
}
signed main() {
  unsigned long long T = 1;
  while (T--) solve();
}
