#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
int n;
int ask(int x1, int y1, int x2, int y2) {
  printf("? %d %d %d %d\n", x1, y1, x2, y2);
  fflush(stdout);
  int x;
  scanf("%d", &x);
  if (x == -1) exit(0);
  return x;
}
void answer(int x1, int y1, int x2, int y2) {
  printf("! %d %d %d %d\n", x1, y1, x2, y2);
  fflush(stdout);
}
int main() {
  scanf("%d", &n);
  pair<int, int> row = make_pair(INF, -INF);
  pair<int, int> col = make_pair(INF, -INF);
  for (int i = 1; i <= n; i++) {
    int v = ask(i, 1, i, n);
    if (v & 1) {
      row.first = min(row.first, i);
      row.second = max(row.second, i);
    }
    v = ask(1, i, n, i);
    if (v & 1) {
      col.first = min(col.first, i);
      col.second = max(col.second, i);
    }
  }
  if (row.first != INF && col.first != INF) {
    int v = ask(row.first, col.first, row.first, col.first);
    if (v == 1)
      answer(row.first, col.first, row.second, col.second);
    else
      answer(row.first, col.second, row.second, col.first);
    return 0;
  }
  if (row.first == INF) {
    int lb = 0;
    int ub = n;
    while (ub - lb > 1) {
      int mid = (lb + ub) / 2;
      if (ask(1, col.first, mid, col.first) & 1)
        ub = mid;
      else
        lb = mid;
    }
    answer(ub, col.first, ub, col.second);
    return 0;
  }
  if (col.first == INF) {
    int lb = 0;
    int ub = n;
    while (ub - lb > 1) {
      int mid = (lb + ub) / 2;
      if (ask(row.first, 1, row.first, mid) & 1)
        ub = mid;
      else
        lb = mid;
    }
    answer(row.first, ub, row.second, ub);
    return 0;
  }
}
