#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e5;
struct rec {
  int x1, y1, x2, y2;
} r1, r2;
int n, i, j, bl, l, r, L, R;
void get(int x1, int y1, int x2, int y2, rec &re) {
  int l, r, g;
  l = y1, r = y2 + 1;
  while (l + 1 < r) {
    int m = (l + r) >> 1;
    printf("? %d %d %d %d\n", x1, m, x2, y2);
    fflush(stdout);
    scanf("%d", &g);
    if (g)
      l = m;
    else
      r = m;
  }
  y1 = l;
  l = y1 - 1, r = y2;
  while (l + 1 < r) {
    int m = (l + r) >> 1;
    printf("? %d %d %d %d\n", x1, y1, x2, m);
    fflush(stdout);
    scanf("%d", &g);
    if (g)
      r = m;
    else
      l = m;
  }
  y2 = r;
  l = x1, r = x2 + 1;
  while (l + 1 < r) {
    int m = (l + r) >> 1;
    printf("? %d %d %d %d\n", m, y1, x2, y2);
    fflush(stdout);
    scanf("%d", &g);
    if (g)
      l = m;
    else
      r = m;
  }
  x1 = l;
  l = x1 - 1, r = x2;
  while (l + 1 < r) {
    int m = (l + r) >> 1;
    printf("? %d %d %d %d\n", x1, y1, m, y2);
    fflush(stdout);
    scanf("%d", &g);
    if (g)
      r = m;
    else
      l = m;
  }
  x2 = r;
  re = (rec){x1, y1, x2, y2};
}
int main() {
  scanf("%d", &n);
  l = 1, r = n + 1;
  while (l + 1 < r) {
    int m = (l + r) >> 1;
    printf("? %d %d %d %d\n", 1, 1, n, m - 1);
    fflush(stdout);
    scanf("%d", &L);
    printf("? %d %d %d %d\n", 1, m, n, n);
    fflush(stdout);
    scanf("%d", &R);
    if (L == 2)
      r = m;
    else if (R == 2)
      l = m;
    else if (L == 1 && R == 1) {
      bl = m;
      break;
    } else if (!L && !R)
      break;
    else if (L == 1 && !R)
      r = m;
    else
      l = m;
  }
  if (bl) {
    get(1, 1, n, bl - 1, r1);
    get(1, bl, n, n, r2);
  } else {
    l = 1, r = n + 1;
    while (l + 1 < r) {
      int m = (l + r) >> 1;
      printf("? %d %d %d %d\n", 1, 1, m - 1, n);
      fflush(stdout);
      scanf("%d", &L);
      printf("? %d %d %d %d\n", m, 1, n, n);
      fflush(stdout);
      scanf("%d", &R);
      if (L == 2)
        r = m;
      else if (R == 2)
        l = m;
      else if (L == 1 && R == 1) {
        bl = m;
        break;
      } else if (!L && !R)
        break;
      else if (L == 1 && !R)
        r = m;
      else
        l = m;
    }
    get(1, 1, bl - 1, n, r1);
    get(bl, 1, n, n, r2);
  }
  printf("! %d %d %d %d", r1.x1, r1.y1, r1.x2, r1.y2);
  fflush(stdout);
  printf(" %d %d %d %d", r2.x1, r2.y1, r2.x2, r2.y2);
  return 0;
}
