#include <bits/stdc++.h>
using namespace std;
template <class T>
bool uin(T &a, T b) {
  return a > b ? (a = b, true) : false;
}
template <class T>
bool uax(T &a, T b) {
  return a < b ? (a = b, true) : false;
}
int n;
int ask(int x1, int y1, int x2, int y2) {
  cout << "? " << x1 + 1 << ' ' << y1 + 1 << ' ' << x2 << ' ' << y2 << endl;
  int x;
  cin >> x;
  return x;
}
int tryx() {
  int l = 0, r = n;
  while (r - l > 1) {
    int m = (l + r) / 2;
    (ask(0, 0, m, n) >= 1 ? r : l) = m;
  }
  if (ask(0, 0, r, n) == 1 && ask(r, 0, n, n) == 1) return r;
  return -1;
}
int tryy() {
  int l = 0, r = n;
  while (r - l > 1) {
    int m = (l + r) / 2;
    (ask(0, 0, n, m) >= 1 ? r : l) = m;
  }
  if (ask(0, 0, n, r) == 1 && ask(0, r, n, n) == 1) return r;
  return -1;
}
pair<pair<int, int>, pair<int, int> > locate(int lx, int ly, int rx, int ry) {
  for (int i = (int)(20) - 1; i >= 0; --i) {
    int sh = 1 << i;
    if (lx + sh < rx && ask(lx + sh, ly, rx, ry)) lx += sh;
    if (rx - sh > lx && ask(lx, ly, rx - sh, ry)) rx -= sh;
    if (ly + sh < ry && ask(lx, ly + sh, rx, ry)) ly += sh;
    if (ry - sh > ly && ask(lx, ly, rx, ry - sh)) ry -= sh;
  }
  return make_pair(make_pair(lx, ly), make_pair(rx, ry));
}
void print(pair<pair<int, int>, pair<int, int> > p) {
  cout << p.first.first + 1 << ' ' << p.first.second + 1 << ' '
       << p.second.first << ' ' << p.second.second << ' ';
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.precision(10);
  cout << fixed;
  cin >> n;
  int p;
  pair<pair<int, int>, pair<int, int> > r1, r2;
  if ((p = tryx()) != -1) {
    r1 = locate(0, 0, p, n);
    r2 = locate(p, 0, n, n);
  } else if ((p = tryy()) != -1) {
    r1 = locate(0, 0, n, p);
    r2 = locate(0, p, n, n);
  } else
    assert(false);
  cout << "! ";
  print(r1);
  print(r2);
  cout << endl;
  return 0;
}
