#include <bits/stdc++.h>
using namespace std;
int n;
int x_search(const int &down, const int &up, const int &c) {
  int l = down, r = up, key = 0;
  while (l <= r) {
    int mid = (l + r) / 2, cnt;
    cout << "? " << mid << " " << 1 << " " << n << " " << n << "\n";
    cin >> cnt;
    if (cnt >= c) {
      key = mid;
      l = mid + 1;
    } else
      r = mid - 1;
  }
  return key;
}
int u_search(const int &left, const int &right, const int &c) {
  int l = left, r = right, key = right + 1;
  while (l <= r) {
    int mid = (l + r) / 2, cnt;
    cout << "? " << 1 << " " << 1 << " " << mid << " " << n << "\n";
    cin >> cnt;
    if (cnt >= c) {
      key = mid;
      r = mid - 1;
    } else
      l = mid + 1;
  }
  return key;
}
int y_search(const int &left, const int &right, const int &c) {
  int l = left, r = right, key = 0;
  while (l <= r) {
    int mid = (l + r) / 2, cnt;
    cout << "? " << 1 << " " << mid << " " << n << " " << n << "\n";
    cin >> cnt;
    if (cnt >= c) {
      key = mid;
      l = mid + 1;
    } else
      r = mid - 1;
  }
  return key;
}
int v_search(const int &left, const int &right, const int &c) {
  int l = left, r = right, key = right + 1;
  while (l <= r) {
    int mid = (l + r) / 2, cnt;
    cout << "? " << 1 << " " << 1 << " " << n << " " << mid << "\n";
    cin >> cnt;
    if (cnt >= c) {
      key = mid;
      r = mid - 1;
    } else
      l = mid + 1;
  }
  return key;
}
void check(int x_1, int y_1, int u_1, int v_1, int x_2, int y_2, int u_2,
           int v_2) {
  if (x_1 > u_1 || y_1 > v_1 || x_2 > u_2 || y_2 > v_2) return;
  int c1, c2;
  cout << "? " << x_1 << " " << y_1 << " " << u_1 << " " << v_1 << "\n";
  cin >> c1;
  cout << "? " << x_2 << " " << y_2 << " " << u_2 << " " << v_2 << "\n";
  cin >> c2;
  if (c1 == 1 && c2 == 1)
    cout << "! " << x_1 << " " << y_1 << " " << u_1 << " " << v_1 << " " << x_2
         << " " << y_2 << " " << u_2 << " " << v_2 << "\n";
}
int main() {
  cin >> n;
  int x_1 = x_search(1, n, 2), x_2 = x_search(x_1, n, 1),
      u_2 = u_search(1, n, 2), u_1 = u_search(1, u_2, 1),
      y_1 = y_search(1, n, 2), y_2 = y_search(y_1, n, 1),
      v_2 = v_search(1, n, 2), v_1 = v_search(1, v_2, 1);
  int c;
  check(x_1, y_1, u_1, v_1, x_2, y_2, u_2, v_2);
  check(x_1, y_1, u_2, v_1, x_2, y_2, u_1, v_2);
  check(x_1, y_1, u_1, v_2, x_2, y_2, u_2, v_1);
  check(x_1, y_1, u_2, v_2, x_2, y_2, u_1, v_1);
  check(x_1, y_2, u_1, v_1, x_2, y_1, u_2, v_2);
  check(x_1, y_2, u_2, v_1, x_2, y_1, u_1, v_2);
  check(x_1, y_2, u_1, v_2, x_2, y_1, u_2, v_1);
  check(x_1, y_2, u_2, v_2, x_2, y_1, u_1, v_1);
}
