#include <bits/stdc++.h>
using namespace std;
int flag = 0, ans, n;
int r[10], d[12], l[12], u[12];
int print(int x1, int y1, int x2, int y2) {
  cout << "? " << x1 << " " << y1 << " " << x2 << " " << y2 << endl;
  int val;
  cin >> val;
  if (flag) {
    if (x1 <= l[0] && r[0] <= x2 && y1 <= d[0] && u[0] <= y2) return val - 1;
  }
  return val;
}
int findright(int l, int r) {
  if (l > r) return 0;
  int mid = (l + r) / 2;
  int val = print(1, 1, mid, n);
  if (val > 0) {
    ans = mid;
    findright(l, mid - 1);
  } else {
    findright(mid + 1, r);
  }
  return 0;
}
int findleft(int l, int r, int r1) {
  if (l > r) return 0;
  int mid = (l + r) / 2;
  int val = print(mid, 1, r1, n);
  if (val > 0) {
    ans = mid;
    findleft(mid + 1, r, r1);
  } else {
    findleft(l, mid - 1, r1);
  }
  return 0;
}
int findup(int l, int r, int l1, int r1) {
  if (l > r) return 0;
  int mid = (l + r) / 2;
  int val = print(l1, 1, r1, mid);
  if (val > 0) {
    ans = mid;
    findup(l, mid - 1, l1, r1);
  } else {
    findup(mid + 1, r, l1, r1);
  }
  return 0;
}
int finddown(int l, int r, int l1, int r1, int u1) {
  if (l > r) return 0;
  int mid = (l + r) / 2;
  int val = print(l1, mid, r1, u1);
  if (val > 0) {
    ans = mid;
    finddown(mid + 1, r, l1, r1, u1);
  } else {
    finddown(l, mid - 1, l1, r1, u1);
  }
  return 0;
}
int main() {
  std::ios::sync_with_stdio(false);
  int i;
  cin >> n;
  int r1, l1, u1, d1;
  findright(1, n);
  r1 = ans;
  findleft(1, r1, r1);
  l1 = ans;
  l[0] = l1;
  r[0] = r1;
  findup(1, n, l1, r1);
  u1 = ans;
  finddown(1, u1, l1, r1, u1);
  d1 = ans;
  u[0] = u1;
  d[0] = d1;
  flag = 1;
  findright(1, n);
  r1 = ans;
  findleft(1, r1, r1);
  l1 = ans;
  l[1] = l1;
  r[1] = r1;
  findup(1, n, l1, r1);
  u1 = ans;
  finddown(1, u1, l1, r1, u1);
  d1 = ans;
  u[1] = u1;
  d[1] = d1;
  cout << "! ";
  for (i = 0; i < 1; i++) {
    cout << l[i] << " " << d[i] << " " << r[i] << " " << u[i] << " ";
  }
  i = 1;
  cout << l[i] << " " << d[i] << " " << r[i] << " " << u[i];
}
