#include <bits/stdc++.h>
using namespace std;
class R {
 public:
  int l;
  int r;
  int t;
  int b;
  R(int l, int r, int t, int b) {
    this->l = l;
    this->r = r;
    this->b = b;
    this->t = t;
  }
};
int ask(int x1, int x2, int y1, int y2) {
  cout << "? " << x1 << ' ' << y1 << ' ' << x2 << ' ' << y2 << endl;
  fflush(stdout);
  int ans;
  cin >> ans;
  return ans;
}
int askR(R r) {
  cout << "? " << r.l << ' ' << r.t << ' ' << r.r << ' ' << r.b << endl;
  fflush(stdout);
  int ans;
  cin >> ans;
  return ans;
}
bool check(R other, R border) {
  if (other.t >= border.t && other.l >= border.l && other.r <= border.r &&
      other.b <= border.b)
    return true;
  return false;
}
void solveBot(R& r, R other) {
  int left = r.t;
  int right = r.b;
  while (right - left > 1) {
    int m = (right + left) / 2;
    int a = ask(r.l, r.r, r.t, m);
    if (a == 2 || (a == 1 && !check(other, R(r.l, r.r, r.t, m)))) {
      right = m;
      continue;
    }
    left = m;
  }
  int a = ask(r.l, r.r, r.t, left);
  if (a == 2 || (a == 1 && !check(other, R(r.l, r.r, r.t, left)))) {
    R rr = R(r.l, r.r, r.t, left);
    r = rr;
    return;
  }
  R rr = R(r.l, r.r, r.t, right);
  r = rr;
}
void solveRight(R& r, R other) {
  int left = r.l;
  int right = r.r;
  while (right - left > 1) {
    int m = (right + left) / 2;
    int a = ask(r.l, m, r.t, r.b);
    if (a == 2 || (a == 1 && !check(other, R(r.l, m, r.t, r.b)))) {
      right = m;
      continue;
    }
    left = m;
  }
  int a = ask(r.l, left, r.t, r.b);
  if (a == 2 || (a == 1 && !check(other, R(r.l, left, r.t, r.b)))) {
    R rr = R(r.l, left, r.t, r.b);
    r = rr;
    return;
  }
  R rr = R(r.l, right, r.t, r.b);
  r = rr;
}
void solveLeft(R& r, R other) {
  int left = r.l;
  int right = r.r;
  while (right - left > 1) {
    int m = (right + left) / 2;
    int a = ask(m, r.r, r.t, r.b);
    if (a == 2 || (a == 1 && !check(other, R(m, r.r, r.t, r.b)))) {
      left = m;
      continue;
    }
    right = m;
  }
  int a = ask(right, r.r, r.t, r.b);
  if (a == 2 || (a == 1 && !check(other, R(right, r.r, r.t, r.b)))) {
    R rr = R(right, r.r, r.t, r.b);
    r = rr;
    return;
  }
  R rr = R(left, r.r, r.t, r.b);
  r = rr;
}
void solveTop(R& r, R other) {
  int left = r.t;
  int right = r.b;
  while (right - left > 1) {
    int m = (right + left) / 2;
    int a = ask(r.l, r.r, m, r.b);
    if (a == 2 || (a == 1 && !check(other, R(r.l, r.r, m, r.b)))) {
      left = m;
      continue;
    }
    right = m;
  }
  int a = ask(r.l, r.r, right, r.b);
  if (a == 2 || (a == 1 && !check(other, R(r.l, r.r, right, r.b)))) {
    R rr = R(r.l, r.r, right, r.b);
    r = rr;
    return;
  }
  R rr = R(r.l, r.r, left, r.b);
  r = rr;
}
void solve(int n) {
  R r = R(1, n, 1, n);
  R fiks = R(-1, -1, -1, -1);
  solveBot(r, fiks);
  solveLeft(r, fiks);
  solveRight(r, fiks);
  solveTop(r, fiks);
  R s = R(1, n, 1, n);
  solveBot(s, r);
  solveLeft(s, r);
  solveRight(s, r);
  solveTop(s, r);
  cout << "! " << r.l << ' ' << r.t << ' ' << r.r << ' ' << r.b;
  cout << ' ' << s.l << ' ' << s.t << ' ' << s.r << ' ' << s.b;
}
int main() {
  int n;
  cin >> n;
  solve(n);
  return 0;
}
