#include <bits/stdc++.h>
using namespace std;
using LL = long long;
using pii = pair<int, int>;
int n;
int query(int tp, int lo, int hi) {
  if (tp)
    printf("? %d %d %d %d\n", 1, lo, n, hi);
  else
    printf("? %d %d %d %d\n", lo, 1, hi, n);
  fflush(stdout);
  int x;
  scanf("%d", &x);
  return x;
}
vector<pii> solve(int tp) {
  int cur = 1, cnt;
  int lo = 1, hi = n, l = 1, r = n;
  while (l < r) {
    int md = l + r >> 1;
    int cnt = query(tp, md + 1, hi);
    if (cnt < cur)
      r = md;
    else
      l = md + 1;
  }
  lo = l;
  cur = 1, r = hi;
  while (l < r) {
    int md = l + r >> 1;
    int cnt = query(tp, lo, md);
    if (cnt < cur)
      l = md + 1;
    else
      r = md;
  }
  vector<pii> res;
  res.emplace_back(lo, l);
  if (query(tp, lo, l) == 2)
    lo = lo, hi = l;
  else if (lo > 1 && query(tp, 1, l - 1))
    hi = l - 1, lo = 1;
  else
    lo = 1, hi = n, cur = 2;
  l = lo, r = hi;
  while (l < r) {
    int md = l + r >> 1;
    int cnt = query(tp, lo, md);
    if (cnt < cur)
      l = md + 1;
    else
      r = md;
  }
  hi = l;
  l = lo;
  while (l < r) {
    int md = l + r >> 1;
    int cnt = query(tp, md + 1, hi);
    if (cnt < cur)
      r = md;
    else
      l = md + 1;
  }
  res.emplace_back(l, hi);
  return res;
}
int main() {
  scanf("%d", &n);
  vector<pii> ans[2];
  ans[1] = solve(1);
  ans[0] = solve(0);
  printf("? %d %d %d %d\n", ans[0][0].first, ans[1][0].first, ans[0][0].second,
         ans[1][0].second);
  fflush(stdout);
  int x;
  scanf("%d", &x);
  if (!x) swap(ans[1][0], ans[1][1]);
  printf("! %d %d %d %d %d %d %d %d\n", ans[0][0].first, ans[1][0].first,
         ans[0][0].second, ans[1][0].second, ans[0][1].first, ans[1][1].first,
         ans[0][1].second, ans[1][1].second);
  fflush(stdout);
  return 0;
}
