#include <bits/stdc++.h>
using namespace std;
pair<pair<int, int>, pair<int, int> > find_pramougolnik(int x1, int y1, int x2,
                                                        int y2) {
  int lef = x1 - 1, rig = x2;
  while (lef + 1 < rig) {
    int mid = (lef + rig) / 2;
    cout << "? " << x1 << ' ' << y1 << ' ' << mid << ' ' << y2 << endl;
    int kol;
    cin >> kol;
    if (kol == 1)
      rig = mid;
    else
      lef = mid;
  }
  int up = rig;
  lef = x1 - 1, rig = x2;
  while (lef + 1 < rig) {
    int mid = (lef + rig) / 2;
    cout << "? " << mid + 1 << ' ' << y1 << ' ' << x2 << ' ' << y2 << endl;
    int kol;
    cin >> kol;
    if (kol == 1)
      lef = mid;
    else
      rig = mid;
  }
  int down = lef + 1;
  lef = y1 - 1, rig = y2;
  while (lef + 1 < rig) {
    int mid = (lef + rig) / 2;
    cout << "? " << x1 << ' ' << y1 << ' ' << x2 << ' ' << mid << endl;
    int kol;
    cin >> kol;
    if (kol == 1)
      rig = mid;
    else
      lef = mid;
  }
  int rights = rig;
  lef = y1 - 1, rig = y2;
  while (lef + 1 < rig) {
    int mid = (lef + rig) / 2;
    cout << "? " << x1 << ' ' << mid + 1 << ' ' << x2 << ' ' << y2 << endl;
    int kol;
    cin >> kol;
    if (kol == 1)
      lef = mid;
    else
      rig = mid;
  }
  int lefts = lef + 1;
  return make_pair(make_pair(down, lefts), make_pair(up, rights));
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  int lef = 0, rig = n;
  while (lef + 1 < rig) {
    int mid = (lef + rig) / 2;
    cout << "? 1 1 " << n << ' ' << mid << endl;
    int kol;
    cin >> kol;
    if (kol > 0)
      rig = mid;
    else
      lef = mid;
  }
  if (rig != n) {
    cout << "? 1 " << rig + 1 << ' ' << n << ' ' << n << endl;
    int kol;
    cin >> kol;
    if (kol == 1) {
      pair<pair<int, int>, pair<int, int> > A = find_pramougolnik(1, 1, n, rig);
      pair<pair<int, int>, pair<int, int> > B =
          find_pramougolnik(1, rig + 1, n, n);
      cout << "! " << A.first.first << ' ' << A.first.second << ' '
           << A.second.first << ' ' << A.second.second << ' ' << B.first.first
           << ' ' << B.first.second << ' ' << B.second.first << ' '
           << B.second.second << endl;
      exit(0);
    }
  }
  lef = 0, rig = n;
  while (lef + 1 < rig) {
    int mid = (lef + rig) / 2;
    cout << "? 1 1 " << mid << ' ' << n << endl;
    int kol;
    cin >> kol;
    if (kol > 0)
      rig = mid;
    else
      lef = mid;
  }
  pair<pair<int, int>, pair<int, int> > A = find_pramougolnik(1, 1, rig, n);
  pair<pair<int, int>, pair<int, int> > B = find_pramougolnik(rig + 1, 1, n, n);
  cout << "! " << A.first.first << ' ' << A.first.second << ' '
       << A.second.first << ' ' << A.second.second << ' ' << B.first.first
       << ' ' << B.first.second << ' ' << B.second.first << ' '
       << B.second.second << endl;
  return 0;
}
