#include <bits/stdc++.h>
using namespace std;
int x11 = 3, y11 = 4, x12 = 10, y12 = 4, x21 = 1, y21 = 1, x22 = 10, y22 = 1;
int queries = 0;
int n;
int query(int x1, int y1, int x2, int y2) {
  queries++;
  if (x1 > x2) throw 0;
  if (y1 > y2) throw 0;
  cout << "?" << ' ' << x1 << ' ' << y1 << ' ' << x2 << ' ' << y2 << endl;
  cout.flush();
  int q;
  cin >> q;
  return q;
}
pair<std::pair<int, int>, std::pair<int, int> > find(int x1, int y1, int x2,
                                                     int y2) {
  pair<std::pair<int, int>, std::pair<int, int> > p;
  int l = x1, r = x2;
  while (l + 1 < r) {
    int m = (l + r) / 2;
    int q = query(x1, y1, m, y2);
    if (q == 1)
      r = m;
    else
      l = m;
  }
  int right = r;
  if (right > x1 && query(x1, y1, right - 1, y2) == 1) right--;
  l = x1, r = x2;
  while (l + 1 < r) {
    int m = (l + r) / 2;
    int q = query(m, y1, x2, y2);
    if (q == 1)
      l = m;
    else
      r = m;
  }
  int left = l;
  if (left < x2 && query(left + 1, y1, x2, y2) == 1) left++;
  int d = y1, u = y2;
  while (d + 1 < u) {
    int m = (d + u) / 2;
    int q = query(x1, y1, x2, m);
    if (q == 1)
      u = m;
    else
      d = m;
  }
  int up = u;
  if (up > y1 && query(x1, y1, x2, up - 1) == 1) up--;
  d = y1, u = y2;
  while (d + 1 < u) {
    int m = (d + u) / 2;
    int q = query(x1, m, x2, y2);
    if (q == 1)
      d = m;
    else
      u = m;
  }
  int down = d;
  if (down < y2 && query(x1, down + 1, x2, y2) == 1) down++;
  return make_pair(make_pair(left, down), make_pair(right, up));
}
int main() {
  cin >> n;
  int l = 0, r = n;
  while (l + 1 < r) {
    int m = (l + r) / 2;
    int q = query(1, 1, m, n);
    if (q >= 1) {
      r = m;
    } else
      l = m;
  }
  int s = r;
  if (r < n) {
    int q = query(1, 1, s, n);
    int q_ = query(s + 1, 1, n, n);
    if (q == 1 && q_ == 1) {
      pair<std::pair<int, int>, std::pair<int, int> > p1 = find(1, 1, s, n);
      pair<std::pair<int, int>, std::pair<int, int> > p2 = find(s + 1, 1, n, n);
      cout << "! ";
      cout << p1.first.first << " " << p1.first.second << " ";
      cout << p1.second.first << " " << p1.second.second << " ";
      cout << p2.first.first << " " << p2.first.second << " ";
      cout << p2.second.first << " " << p2.second.second << " ";
      cout << endl;
      cout.flush();
      return 0;
    }
  }
  int d = 0, u = n;
  while (d + 1 < u) {
    int m = (d + u) / 2;
    int q = query(1, 1, n, m);
    if (q >= 1) {
      u = m;
    } else
      d = m;
  }
  s = u;
  int q = query(1, 1, n, s);
  int q_ = query(1, s + 1, n, n);
  if (q == 1 && q_ == 1) {
    pair<std::pair<int, int>, std::pair<int, int> > p1 = find(1, 1, n, s);
    pair<std::pair<int, int>, std::pair<int, int> > p2 = find(1, s + 1, n, n);
    cout << "! ";
    cout << p1.first.first << " " << p1.first.second << " ";
    cout << p1.second.first << " " << p1.second.second << " ";
    cout << p2.first.first << " " << p2.first.second << " ";
    cout << p2.second.first << " " << p2.second.second << " ";
    cout << endl;
    cout.flush();
    return 0;
  }
}
