#include <bits/stdc++.h>
using namespace std;
int n;
int out(int a, int b, int c, int d) {
  if (a > c || b > d) return 0;
  printf("? %d %d %d %d\n", a, b, c, d);
  fflush(stdout);
  int res;
  scanf("%d", &res);
  return res;
}
void solve(int a, int b, int c, int d, int &a2, int &b2, int &c2, int &d2) {
  int l, r;
  l = b, r = d, d2 = d;
  while (l <= r) {
    int mid = (l + r) / 2;
    int res = out(a, b, c, mid);
    if (res >= 1)
      r = mid - 1, d2 = min(d2, mid);
    else
      l = mid + 1;
  }
  l = b, r = d, b2 = b;
  while (l <= r) {
    int mid = (l + r) / 2;
    int res = out(a, mid, c, d);
    if (res >= 1)
      l = mid + 1, b2 = max(b2, mid);
    else
      r = mid - 1;
  }
  l = a, r = c, c2 = c;
  while (l <= r) {
    int mid = (l + r) / 2;
    int res = out(a, b, mid, d);
    if (res >= 1)
      r = mid - 1, c2 = min(c2, mid);
    else
      l = mid + 1;
  }
  l = a, r = c, a2 = a;
  while (l <= r) {
    int mid = (l + r) / 2;
    int res = out(mid, b, c, d);
    if (res >= 1)
      l = mid + 1, a2 = max(a2, mid);
    else
      r = mid - 1;
  }
}
int main() {
  int x, y, x2, y2, x3, y3, x4, y4;
  scanf("%d", &n);
  bool flag = 0;
  int l = 1, r = n, lim;
  while (l <= r) {
    int mid = (l + r) / 2;
    int res = out(1, 1, n, mid);
    int res2 = out(1, mid + 1, n, n);
    if (res && res2) {
      flag = 1;
      lim = mid;
      break;
    } else if (!res2)
      r = mid - 1;
    else if (!res)
      l = mid + 1;
  }
  if (flag) {
    solve(1, 1, n, lim, x, y, x2, y2);
    solve(1, lim + 1, n, n, x3, y3, x4, y4);
    printf("! %d %d %d %d %d %d %d %d\n", x, y, x2, y2, x3, y3, x4, y4);
  } else {
    l = 1, r = n, lim = n;
    while (l <= r) {
      int mid = (l + r) / 2;
      int res = out(1, 1, mid, n);
      if (res >= 1)
        r = mid - 1, lim = min(lim, mid);
      else
        l = mid + 1;
    }
    solve(1, 1, lim, n, x, y, x2, y2);
    solve(lim + 1, 1, n, n, x3, y3, x4, y4);
    printf("! %d %d %d %d %d %d %d %d\n", x, y, x2, y2, x3, y3, x4, y4);
  }
  return 0;
}
