#include <bits/stdc++.h>
using namespace std;
const int N = 1000;
int n;
int qx[2], qy[2], len = 0;
void get(int x) {
  int l = 1, r = n, mid;
  for (; l < r;) {
    mid = (l + r) >> 1;
    printf("? %d %d %d %d\n", x, 1, x, mid);
    fflush(stdout);
    int w;
    scanf("%d", &w);
    if (w & 1)
      r = mid;
    else
      l = mid + 1;
  }
  qx[++len] = x, qy[len] = l;
}
void get2(int x) {
  int l = 1, r = n, mid;
  for (; l < r;) {
    mid = (l + r) >> 1;
    printf("? %d %d %d %d\n", 1, x, mid, x);
    fflush(stdout);
    int w;
    scanf("%d", &w);
    if (w & 1)
      r = mid;
    else
      l = mid + 1;
  }
  qx[++len] = l, qy[len] = x;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    printf("? %d %d %d %d\n", i, 1, i, n);
    fflush(stdout);
    int w;
    scanf("%d", &w);
    if (w & 1) {
      get(i);
      if (len >= 2) break;
    }
  }
  if (!len) {
    for (int i = 1; i <= n; i++) {
      printf("? %d %d %d %d\n", 1, i, n, i);
      fflush(stdout);
      int w;
      scanf("%d", &w);
      if (w & 1) {
        if (!len)
          get2(i);
        else
          qx[++len] = qx[1], qy[len] = i;
        if (len >= 2) break;
      }
    }
  }
  printf("! %d %d %d %d\n", qx[1], qy[1], qx[2], qy[2]);
  fflush(stdout);
  return 0;
}
