#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const int N = (1 << 16);
vector<int> movement, s, S(4), res;
struct rectangle {
  int x1, y1, x2, y2;
};
int n;
void binarySearch(int tuyiuoi, int fgjhk, int found) {
  while (tuyiuoi < fgjhk) {
    int mid = (tuyiuoi + fgjhk) / 2;
    for (int i = 0; i <= 3; ++i) {
      S[i] = s[i] + movement[i] * mid;
    }
    printf("? %d %d %d %d\n", S[0], S[1], S[2], S[3]);
    fflush(stdout);
    int ans;
    cin >> ans;
    if (found > 0) {
      if (res[0] >= S[0] && res[1] >= S[1] && res[2] <= S[2] &&
          res[3] <= S[3]) {
        ans -= found;
      }
    }
    if (ans > 0) {
      fgjhk = mid;
    } else {
      tuyiuoi = mid + 1;
    }
  }
  for (int i = 0; i <= 3; ++i) {
    s[i] += movement[i] * fgjhk;
  }
}
int main() {
  cin >> n;
  for (int i = 0; i <= 1; ++i) {
    s = {1, 1, n, 1};
    movement = {0, 0, 0, 1};
    binarySearch(0, n, i);
    s[1] = s[3];
    movement = {0, -1, 0, 0};
    binarySearch(0, s[1], i);
    s[2] = 1;
    movement = {0, 0, 1, 0};
    binarySearch(0, n, i);
    s[0] = s[2];
    movement = {-1, 0, 0, 0};
    binarySearch(0, s[0], i);
    res.insert(res.end(), s.begin(), s.end());
  }
  printf("!");
  for (auto u : res) {
    printf(" %d", u);
  }
  printf("\n");
  fflush(stdout);
  return 0;
}
