#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const double eps = 1e-8;
const int mod = 1e9 + 7;
const int maxn = 100000 + 10;
int query(int x1, int y1, int x2, int y2) {
  printf("? %d %d %d %d\n", x1, y1, x2, y2);
  fflush(stdout);
  int flag;
  scanf("%d", &flag);
  return flag;
}
pair<int, int> p[4];
void find_cor(int k, pair<int, int> ld, pair<int, int> ru) {
  int l, r;
  l = ld.first - 1, r = ru.first;
  while (r - l > 1) {
    int mid = (l + r) / 2;
    int flag = query(ld.first, ld.second, mid, ru.second);
    if (flag == 1)
      r = mid;
    else
      l = mid;
  }
  ru.first = r;
  l = ld.second - 1, r = ru.second;
  while (r - l > 1) {
    int mid = (l + r) / 2;
    int flag = query(ld.first, ld.second, ru.first, mid);
    if (flag == 1)
      r = mid;
    else
      l = mid;
  }
  ru.second = r;
  l = ld.first, r = ru.first + 1;
  while (r - l > 1) {
    int mid = (l + r) / 2;
    int flag = query(mid, ld.second, ru.first, ru.second);
    if (flag == 1)
      l = mid;
    else
      r = mid;
  }
  ld.first = l;
  l = ld.second, r = ru.second + 1;
  while (r - l > 1) {
    int mid = (l + r) / 2;
    int flag = query(ld.first, mid, ru.first, ru.second);
    if (flag == 1)
      l = mid;
    else
      r = mid;
  }
  ld.second = l;
  p[k] = ld;
  p[k + 1] = ru;
}
int main() {
  int n;
  scanf("%d", &n);
  int l = 0, r = n;
  while (r - l > 1) {
    int mid = (l + r) / 2;
    int flag = query(1, 1, mid, n);
    if (flag >= 1)
      r = mid;
    else
      l = mid;
  }
  int flag2;
  if (r + 1 <= n)
    flag2 = query(r + 1, 1, n, n);
  else
    flag2 = 0;
  if (flag2 == 1) {
    find_cor(0, pair<int, int>(1, 1), pair<int, int>(r, n));
    find_cor(2, pair<int, int>(r + 1, 1), pair<int, int>(n, n));
    printf("! %d %d %d %d %d %d %d %d\n", p[0].first, p[0].second, p[1].first,
           p[1].second, p[2].first, p[2].second, p[3].first, p[3].second);
    return 0;
  }
  l = 0, r = n;
  while (r - l > 1) {
    int mid = (l + r) / 2;
    int flag = query(1, 1, n, mid);
    if (flag >= 1)
      r = mid;
    else
      l = mid;
  }
  find_cor(0, pair<int, int>(1, 1), pair<int, int>(n, r));
  find_cor(2, pair<int, int>(1, r + 1), pair<int, int>(n, n));
  printf("! %d %d %d %d %d %d %d %d\n", p[0].first, p[0].second, p[1].first,
         p[1].second, p[2].first, p[2].second, p[3].first, p[3].second);
  return 0;
}
