#include <bits/stdc++.h>
using namespace std;
int query(int x1, int x2, int y1, int y2) {
  cout << "? " << (x1 + 1) << " " << (y1 + 1) << " " << (x2 + 1) << " "
       << (y2 + 1) << endl;
  int res;
  cin >> res;
  return res;
}
int main() {
  ios_base::sync_with_stdio(false);
  int N;
  cin >> N;
  vector<int> rs(N), cs(N);
  int ors = 0, ocs = 0;
  for (int n = 0; n < int(N); n++) {
    rs[n] = query(0, N - 1, n, n);
    if (rs[n] % 2) ++ors;
  }
  for (int n = 0; n < int(N); n++) {
    cs[n] = query(n, n, 0, N - 1);
    if (cs[n] % 2) ++ocs;
  }
  int x1 = -1, y1 = -1, x2 = -1, y2 = -1;
  if (ors == 2 && ocs == 2) {
    for (int n = 0; n < int(N); n++)
      if (rs[n] % 2) {
        if (y1 == -1)
          y1 = n;
        else
          y2 = n;
      }
    for (int n = 0; n < int(N); n++)
      if (cs[n] % 2) {
        if (x1 == -1)
          x1 = n;
        else
          x2 = n;
      }
    int res = query(x1, x1, y1, y1);
    if (res % 2 == 0) swap(x1, x2);
  } else if (ors == 2) {
    for (int n = 0; n < int(N); n++)
      if (rs[n] % 2) {
        if (y1 == -1)
          y1 = n;
        else
          y2 = n;
      }
    int a = 0, b = N - 1;
    while (a != b) {
      int c = (a + b) / 2;
      int res = query(a, c, y1, y1);
      if (res % 2)
        b = c;
      else
        a = c + 1;
    }
    x1 = x2 = a;
  } else if (ocs == 2) {
    for (int n = 0; n < int(N); n++)
      if (cs[n] % 2) {
        if (x1 == -1)
          x1 = n;
        else
          x2 = n;
      }
    int a = 0, b = N - 1;
    while (a != b) {
      int c = (a + b) / 2;
      int res = query(x1, x1, a, c);
      if (res % 2)
        b = c;
      else
        a = c + 1;
    }
    y1 = y2 = a;
  }
  cout << "! " << (x1 + 1) << " " << (y1 + 1) << " " << (x2 + 1) << " "
       << (y2 + 1) << endl;
}
