#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
void solve() {
  long long n;
  cin >> n;
  long long left1 = 1;
  long long right1 = n;
  long long up1 = n;
  long long down1 = 1;
  long long lf = 1 - 1;
  long long rg = n + 1;
  while (rg - lf > 1) {
    long long middle = (lf + rg) / 2;
    cout << "? " << down1 << " " << middle << " " << up1 << " " << right1
         << endl;
    fflush(stdout);
    int result;
    cin >> result;
    if (result == 0) {
      rg = middle;
    } else {
      lf = middle;
    }
  }
  left1 = lf;
  lf = left1 - 1;
  rg = n + 1;
  while (rg - lf > 1) {
    long long middle = (lf + rg) / 2;
    cout << "? " << down1 << " " << left1 << " " << up1 << " " << middle
         << endl;
    fflush(stdout);
    int result;
    cin >> result;
    if (result == 0) {
      lf = middle;
    } else {
      rg = middle;
    }
  }
  right1 = rg;
  lf = 1 - 1;
  rg = n + 1;
  while (rg - lf > 1) {
    long long middle = (lf + rg) / 2;
    cout << "? " << middle << " " << left1 << " " << up1 << " " << right1
         << endl;
    fflush(stdout);
    int result;
    cin >> result;
    if (result == 0) {
      rg = middle;
    } else {
      lf = middle;
    }
  }
  down1 = lf;
  lf = down1 - 1;
  rg = n + 1;
  while (rg - lf > 1) {
    long long middle = (lf + rg) / 2;
    cout << "? " << down1 << " " << left1 << " " << middle << " " << right1
         << endl;
    fflush(stdout);
    int result;
    cin >> result;
    if (result == 0) {
      lf = middle;
    } else {
      rg = middle;
    }
  }
  up1 = rg;
  long long left2 = 1;
  long long right2 = n;
  long long up2 = n;
  long long down2 = 1;
  lf = 1 - 1;
  rg = n + 1;
  while (rg - lf > 1) {
    long long middle = (lf + rg) / 2;
    cout << "? " << down2 << " " << middle << " " << up2 << " " << right2
         << endl;
    fflush(stdout);
    int result;
    cin >> result;
    if (left1 >= middle && right1 <= right2 && down1 >= down2 && up1 <= up2) {
      result--;
    }
    if (result == 0) {
      rg = middle;
    } else {
      lf = middle;
    }
  }
  left2 = lf;
  lf = left2 - 1;
  rg = n + 1;
  while (rg - lf > 1) {
    long long middle = (lf + rg) / 2;
    cout << "? " << down2 << " " << left2 << " " << up2 << " " << middle
         << endl;
    fflush(stdout);
    int result;
    cin >> result;
    if (left1 >= left2 && right1 <= middle && down1 >= down2 && up1 <= up2) {
      result--;
    }
    if (result == 0) {
      lf = middle;
    } else {
      rg = middle;
    }
  }
  right2 = rg;
  lf = 1 - 1;
  rg = n + 1;
  while (rg - lf > 1) {
    long long middle = (lf + rg) / 2;
    cout << "? " << middle << " " << left2 << " " << up2 << " " << right2
         << endl;
    fflush(stdout);
    int result;
    cin >> result;
    if (left1 >= left2 && right1 <= right2 && down1 >= middle && up1 <= up2) {
      result--;
    }
    if (result == 0) {
      rg = middle;
    } else {
      lf = middle;
    }
  }
  down2 = lf;
  lf = down2 - 1;
  rg = n + 1;
  while (rg - lf > 1) {
    long long middle = (lf + rg) / 2;
    cout << "? " << down2 << " " << left2 << " " << middle << " " << right2
         << endl;
    fflush(stdout);
    int result;
    cin >> result;
    if (left1 >= left2 && right1 <= right2 && down1 >= down2 && up1 <= middle) {
      result--;
    }
    if (result == 0) {
      lf = middle;
    } else {
      rg = middle;
    }
  }
  up2 = rg;
  cout << "! " << down1 << " " << left1 << " " << up1 << " " << right1 << " "
       << down2 << " " << left2 << " " << up2 << " " << right2 << endl;
  fflush(stdout);
}
int main() { solve(); }
