#include <bits/stdc++.h>
using namespace std;
long long bigmod(long long b, long long p) {
  if (p == 0) return 1;
  long long my = bigmod(b, p / 2);
  my *= my;
  my %= 1000000007;
  if (p & 1) my *= b, my %= 1000000007;
  return my;
}
int setb(int n, int pos) { return n = n | (1 << pos); }
int resb(int n, int pos) { return n = n & ~(1 << pos); }
bool checkb(int n, int pos) { return (bool)(n & (1 << pos)); }
vector<int> v1, v2, v3, v4;
int n;
bool oka(int x1, int y1, int x2, int y2) {
  if (x1 <= x2 && y1 <= y2)
    return true;
  else
    return false;
}
int main() {
  scanf("%d", &n);
  int low, high, mid, ans, x, y;
  low = 1, high = n;
  while (low <= high) {
    mid = (low + high) / 2;
    printf("? %d %d %d %d\n", 1, 1, n, mid);
    fflush(stdout);
    scanf("%d", &x);
    if (x >= 2) {
      ans = mid;
      high = mid - 1;
    } else
      low = mid + 1;
  }
  v1.push_back(ans);
  low = 1, high = n;
  while (low <= high) {
    mid = (low + high) / 2;
    printf("? %d %d %d %d\n", 1, 1, n, mid);
    fflush(stdout);
    scanf("%d", &x);
    if (x >= 1) {
      ans = mid;
      high = mid - 1;
    } else
      low = mid + 1;
  }
  v1.push_back(ans);
  low = 1, high = n;
  while (low <= high) {
    mid = (low + high) / 2;
    printf("? %d %d %d %d\n", 1, mid, n, n);
    fflush(stdout);
    scanf("%d", &x);
    if (x >= 2) {
      ans = mid;
      low = mid + 1;
    } else
      high = mid - 1;
  }
  v2.push_back(ans);
  low = 1, high = n;
  while (low <= high) {
    mid = (low + high) / 2;
    printf("? %d %d %d %d\n", 1, mid, n, n);
    fflush(stdout);
    scanf("%d", &x);
    if (x >= 1) {
      ans = mid;
      low = mid + 1;
    } else
      high = mid - 1;
  }
  v2.push_back(ans);
  low = 1, high = n;
  while (low <= high) {
    mid = (low + high) / 2;
    printf("? %d %d %d %d\n", 1, 1, mid, n);
    fflush(stdout);
    scanf("%d", &x);
    if (x >= 2) {
      ans = mid;
      high = mid - 1;
    } else
      low = mid + 1;
  }
  v3.push_back(ans);
  low = 1, high = n;
  while (low <= high) {
    mid = (low + high) / 2;
    printf("? %d %d %d %d\n", 1, 1, mid, n);
    fflush(stdout);
    scanf("%d", &x);
    if (x >= 1) {
      ans = mid;
      high = mid - 1;
    } else
      low = mid + 1;
  }
  v3.push_back(ans);
  low = 1, high = n;
  while (low <= high) {
    mid = (low + high) / 2;
    printf("? %d %d %d %d\n", mid, 1, n, n);
    fflush(stdout);
    scanf("%d", &x);
    if (x >= 2) {
      ans = mid;
      low = mid + 1;
    } else
      high = mid - 1;
  }
  v4.push_back(ans);
  low = 1, high = n;
  while (low <= high) {
    mid = (low + high) / 2;
    printf("? %d %d %d %d\n", mid, 1, n, n);
    fflush(stdout);
    scanf("%d", &x);
    if (x >= 1) {
      ans = mid;
      low = mid + 1;
    } else
      high = mid - 1;
  }
  v4.push_back(ans);
  for (int i = 0; i < v2.size(); i++) {
    for (int j = 0; j < v1.size(); j++) {
      for (int k = 0; k < v4.size(); k++) {
        for (int l = 0; l < v3.size(); l++) {
          int y1 = v2[i];
          int y2 = v1[j];
          int x1 = v4[k];
          int x2 = v3[l];
          int yy1 = v2[1 - i];
          int yy2 = v1[1 - j];
          int xx1 = v4[1 - k];
          int xx2 = v3[1 - l];
          if (oka(x1, y1, x2, y2) && oka(xx1, yy1, xx2, yy2)) {
            printf("? %d %d %d %d\n", x1, y1, x2, y2);
            fflush(stdout);
            scanf("%d", &x);
            printf("? %d %d %d %d\n", xx1, yy1, xx2, yy2);
            fflush(stdout);
            scanf("%d", &y);
            if (x == 1 && y == 1) {
              printf("!");
              printf(" %d %d %d %d", x1, y1, x2, y2);
              printf(" %d %d %d %d", xx1, yy1, xx2, yy2);
              printf("\n");
              fflush(stdout);
              return 0;
            }
          }
        }
      }
    }
  }
  return 0;
}
