#include <bits/stdc++.h>
using namespace std;
int x1, Y1, x2, y2;
int ok() {
  printf("? %d %d %d %d\n", x1, Y1, x2, y2);
  fflush(stdout);
  int t;
  cin >> t;
  return t;
}
int getl(int l, int r, int &v, int d) {
  int ans = r;
  while (l <= r) {
    int mid = (l + r) / 2;
    v = mid;
    if (ok() >= 1) {
      r = mid - 1;
      ans = mid;
    } else {
      l = mid + 1;
    }
  }
  return ans;
}
int getu(int l, int r, int &v, int d) {
  int ans = r;
  while (l <= r) {
    int mid = (l + r) / 2;
    v = mid;
    if (ok() >= d) {
      l = mid + 1;
      ans = mid;
    } else {
      r = mid - 1;
    }
  }
  return ans;
}
vector<int> ans;
int n;
void solve(int l, int r, int d, int u) {
  x1 = l, x2 = r, Y1 = d, y2 = u;
  l = getu(x1, x2, x1, 1);
  x1 = l, x2 = r, Y1 = d, y2 = u;
  r = getl(x1, x2, x2, 0);
  x1 = l, x2 = r, Y1 = d, y2 = u;
  d = getu(Y1, y2, Y1, 1);
  x1 = l, x2 = r, Y1 = d, y2 = u;
  u = getl(Y1, y2, y2, 0);
  x1 = l, x2 = r, Y1 = d, y2 = u;
  ans.push_back(l);
  ans.push_back(d);
  ans.push_back(r);
  ans.push_back(u);
}
int main() {
  cin >> n;
  x1 = Y1 = 1;
  x2 = y2 = n;
  int line1 = getl(x1, x2, x2, 0);
  x2 = n;
  int line2 = getu(x1, x2, x1, 1);
  x1 = 1;
  if (line2 <= line1) {
    int line3 = getl(Y1, y2, y2, 0);
    y2 = n;
    solve(1, n, 1, line3);
    solve(1, n, line3 + 1, n);
  } else {
    solve(1, line1, 1, n);
    solve(line1 + 1, n, 1, n);
  }
  printf("!");
  for (int i = 0; i < 8; i++) printf(" %d", ans[i]);
}
