#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const long long LL_INF = 0x3f3f3f3f3f3f3f3f;
const int INF = 0x3f3f3f3f;
inline void cmin(int &x, int y) {
  if (y < x) x = y;
}
inline void cmax(int &x, int y) {
  if (y > x) x = y;
}
int main() {
  int n;
  cin >> n;
  vector<int> x, y;
  int conn;
  for (int i = 1; i <= n; i++) {
    printf("? %d %d %d %d\n", i, 1, i, n);
    cout.flush();
    scanf("%d", &conn);
    if (conn % 2 == 1) x.push_back(i);
    if (x.size() == 2) break;
  }
  for (int j = 1; j <= n; j++) {
    printf("? %d %d %d %d\n", 1, j, n, j);
    cout.flush();
    scanf("%d", &conn);
    if (conn % 2 == 1) y.push_back(j);
    if (y.size() == 2) break;
  }
  vector<pair<int, int> > ans;
  if (x.size() == 2 && y.size() == 2) {
    for (int i = 0; i < 2; i++)
      for (int j = 0; j < 2; j++) {
        printf("? %d %d %d %d\n", x[i], y[j], x[i], y[j]);
        cout.flush();
        scanf("%d", &conn);
        if (conn % 2 == 1) ans.push_back(make_pair(x[i], y[j]));
      }
    printf("! %d %d %d %d", ans[0].first, ans[0].second, ans[1].first,
           ans[1].second);
    return 0;
  }
  int l = 1, r = n, rv = 0, mid;
  if (x.size() == 0) {
    while (l < r) {
      mid = (l + r) >> 1;
      printf("? %d %d %d %d\n", l, y[0], mid, y[0]);
      cout.flush();
      scanf("%d", &conn);
      if (conn % 2 == 1)
        r = mid;
      else
        l = mid + 1;
    }
    printf("! %d %d %d %d\n", l, y[0], l, y[1]);
  } else {
    while (l < r) {
      mid = (l + r) >> 1;
      printf("? %d %d %d %d\n", x[0], l, x[0], mid);
      cout.flush();
      scanf("%d", &conn);
      if (conn % 2 == 1)
        r = mid;
      else
        l = mid + 1;
    }
    printf("! %d %d %d %d\n", x[0], l, x[1], l);
  }
  return 0;
}
