#include <bits/stdc++.h>
using namespace std;
const int N = (int)(1e6 + 5);
const int LOG = (int)(20);
int n, k, tot;
vector<pair<int, int> > ans(2);
int ask(int x, int y, int xx, int yy) {
  int re;
  cout << "?"
       << " " << x << " " << y << " " << xx << " " << yy << "\n"
       << flush;
  cin >> re;
  return re;
}
void bs1(int col, int x, int y) {
  if (x >= y) {
    ans[0].first = x;
    ans[1].first = x;
    return;
  }
  if (ask(1, col, ((x + y) / 2), col) % 2 == 1)
    bs1(col, x, ((x + y) / 2));
  else
    bs1(col, ((x + y) / 2) + 1, y);
}
void bs2(int row, int x, int y) {
  if (x >= y) {
    ans[0].second = x;
    ans[1].second = x;
    return;
  }
  if (ask(row, 1, row, ((x + y) / 2)) % 2 == 1)
    bs2(row, x, ((x + y) / 2));
  else
    bs2(row, ((x + y) / 2) + 1, y);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  int st = 1;
  int ind = 0;
  for (int i = 1; i <= n; i++)
    if (ask(1, st, n, i) % 2 == 1) {
      st = i + 1;
      ans[ind++].second = i;
    }
  st = 1;
  ind = 0;
  for (int i = 1; i <= n; i++)
    if (ask(st, 1, i, n) % 2 == 1) {
      st = i + 1;
      ans[ind++].first = i;
    }
  if (ans[0].first == 0)
    bs1(ans[0].second, 1, n);
  else if (ans[0].second == 0)
    bs2(ans[0].first, 1, n);
  else if (ask(ans[0].first, ans[0].second, ans[0].first, ans[0].second) % 2 !=
               1 ||
           ask(ans[1].first, ans[1].second, ans[1].first, ans[1].second) % 2 !=
               1)
    swap(ans[0].first, ans[1].first);
  cout << "!"
       << " " << ans[0].first << " " << ans[0].second << " " << ans[1].first
       << " " << ans[1].second << "\n"
       << flush;
}
