#include <bits/stdc++.h>
using namespace std;
struct node {
  int x11;
  int y11;
  int x12;
  int y12;
  int x21;
  int y21;
  int x22;
  int y22;
};
int n;
int find(int x1, int y1, int x2, int y2, int k) {
  int sw = 2, tmp;
  int *pos;
  int st, ed, mid;
  if (k == 1) {
    pos = &x2;
    st = x1;
    ed = x2;
  } else if (k == 2) {
    pos = &x1;
    st = x1;
    ed = x2;
  } else if (k == 3) {
    pos = &y2;
    st = y1;
    ed = y2;
  } else if (k == 4) {
    pos = &y1;
    st = y1;
    ed = y2;
  }
  while (st < ed) {
    mid = (st + ed) / 2;
    *pos = mid;
    printf("? %d %d %d %d\n", x1, y1, x2, y2);
    fflush(stdout);
    scanf("%d", &tmp);
    if (k & 1) {
      if (tmp == sw)
        ed = mid;
      else
        st = mid + 1;
    } else {
      if (tmp == sw)
        st = mid + 1;
      else
        ed = mid;
    }
  }
  if (k & 1)
    return st;
  else
    return st > 1 ? st - 1 : st;
}
int findall(int x1, int y1, int x2, int y2, int k) {
  int st, ed, mid;
  int sw;
  int *pos;
  if (k == 1) {
    pos = &x2;
    st = x1;
    ed = x2;
  } else if (k == 2) {
    pos = &x1;
    st = x1;
    ed = x2 + 1;
  } else if (k == 3) {
    pos = &y2;
    st = y1;
    ed = y2;
  } else if (k == 4) {
    pos = &y1;
    st = y1;
    ed = y2 + 1;
  }
  while (st < ed) {
    mid = (st + ed) / 2;
    *pos = mid;
    printf("? %d %d %d %d\n", x1, y1, x2, y2);
    fflush(stdout);
    scanf("%d", &sw);
    if (k & 1) {
      if (sw >= 1)
        ed = mid;
      else
        st = mid + 1;
    } else {
      if (sw >= 1)
        st = mid + 1;
      else
        ed = mid;
    }
  }
  if (k & 1)
    return st;
  else
    return st > 1 ? st - 1 : st;
}
int chk(int x1, int y1, int x2, int y2) {
  int sw;
  printf("? %d %d %d %d\n", x1, y1, x2, y2);
  fflush(stdout);
  scanf("%d", &sw);
  return sw;
}
int main() {
  int k, tmp;
  node ans;
  scanf("%d", &n);
  ans.x21 = 1;
  ans.x22 = n;
  ans.y21 = 1;
  ans.y22 = n;
  ans.x12 = ans.x22 = find(ans.x21, ans.y21, ans.x22, ans.y22, 1);
  ans.x11 = ans.x21 = find(ans.x21, ans.y21, ans.x22, ans.y22, 2);
  ans.y12 = ans.y22 = find(ans.x21, ans.y21, ans.x22, ans.y22, 3);
  ans.y11 = ans.y21 = find(ans.x21, ans.y21, ans.x22, ans.y22, 4);
  ans.x11 = findall(ans.x11, ans.y11, ans.x12, ans.y12, 2);
  ans.y11 = findall(ans.x11, ans.y11, ans.x12, ans.y12, 4);
  ans.x12 = findall(ans.x11, ans.y11, ans.x12, ans.y12, 1);
  ans.y12 = findall(ans.x11, ans.y11, ans.x12, ans.y12, 3);
  if (ans.x11 != 1 && chk(1, 1, ans.x11 - 1, n))
    ans.x22 = ans.x11 - 1;
  else if (ans.y11 != 1 && chk(1, 1, n, ans.y11 - 1))
    ans.y22 = ans.y11 - 1;
  else if (ans.x12 != n && chk(ans.x12 + 1, 1, n, n))
    ans.x21 = ans.x12 + 1;
  else
    ans.y21 = ans.y12 + 1;
  ans.x21 = findall(ans.x21, ans.y21, ans.x22, ans.y22, 2);
  ans.y21 = findall(ans.x21, ans.y21, ans.x22, ans.y22, 4);
  ans.x22 = findall(ans.x21, ans.y21, ans.x22, ans.y22, 1);
  ans.y22 = findall(ans.x21, ans.y21, ans.x22, ans.y22, 3);
  printf("! %d %d %d %d %d %d %d %d\n", ans.x11, ans.y11, ans.x12, ans.y12,
         ans.x21, ans.y21, ans.x22, ans.y22);
  return 0;
}
