#include <bits/stdc++.h>
using namespace std;
int n;
int quercol(int r) {
  int hi, lo, mid, got;
  lo = 0, hi = n;
  while (hi - lo > 1) {
    mid = (hi + lo) / 2;
    printf("? %d %d %d %d\n", r, 1, r, mid);
    cin >> got;
    if (got & 1)
      hi = mid;
    else
      lo = mid;
  }
  return hi;
}
int querrow(int r) {
  int hi, lo, mid, got;
  lo = 0, hi = n;
  while (hi - lo > 1) {
    mid = (hi + lo) / 2;
    printf("? %d %d %d %d\n", 1, r, mid, r);
    cin >> got;
    if (got & 1)
      hi = mid;
    else
      lo = mid;
  }
  return hi;
}
int main() {
  while (cin >> n) {
    vector<int> ans;
    ans.clear();
    int col, row, got;
    col = n;
    while (col > 0) {
      printf("? %d %d %d %d\n", col, 1, col, n);
      cin >> got;
      if (got & 1) break;
      col--;
    }
    if (got & 1) {
      ans.push_back(col);
      ans.push_back(quercol(col));
      col--;
      while (col > 0) {
        printf("? %d %d %d %d\n", col, 1, col, n);
        cin >> got;
        if (got & 1) break;
        col--;
      }
      ans.push_back(col);
      ans.push_back(quercol(col));
    } else {
      row = n;
      while (row > 0) {
        printf("? %d %d %d %d\n", 1, row, n, row);
        cin >> got;
        if (got & 1) break;
        row--;
      }
      int temp = querrow(row);
      ans.push_back(temp);
      ans.push_back(row);
      row--;
      while (row > 0) {
        printf("? %d %d %d %d\n", 1, row, n, row);
        cin >> got;
        if (got & 1) break;
        row--;
      }
      ans.push_back(temp);
      ans.push_back(row);
    }
    printf("! %d %d %d %d\n", ans[0], ans[1], ans[2], ans[3]);
  }
  return 0;
}
