#include <bits/stdc++.h>
using namespace std;
int n;
int zapytanie(int x1, int y1, int x2, int y2) {
  cout << "? " << x1 << ' ' << y1 << ' ' << x2 << ' ' << y2 << '\n';
  fflush(stdout);
  int w;
  cin >> w;
  return w;
}
void koniec(int x11, int y11, int x12, int y12, int x21, int y21, int x22,
            int y22) {
  cout << "! " << x11 << ' ' << y11 << ' ' << x12 << ' ' << y12 << ' ' << x21
       << ' ' << y21 << ' ' << x22 << ' ' << y22 << '\n';
  fflush(stdout);
}
int znajdz_prawy_bok(int x0, int q) {
  int pocz = x0, kon = n;
  while (pocz < kon) {
    int srod = (pocz + kon) / 2;
    if (zapytanie(x0, 1, srod, n) < q)
      pocz = srod + 1;
    else
      kon = srod;
  }
  return pocz;
}
int znajdz_gorny_bok(int y0, int q) {
  int pocz = y0, kon = n;
  while (pocz < kon) {
    int srod = (pocz + kon) / 2;
    if (zapytanie(1, y0, n, srod) < q)
      pocz = srod + 1;
    else
      kon = srod;
  }
  return pocz;
}
void znajdz_prawy_gorny_rog(int x0, int y0, int q, int& x, int& y) {
  x = znajdz_prawy_bok(x0, q);
  y = znajdz_gorny_bok(y0, q);
}
int znajdz_lewy_bok(int x0, int q) {
  int pocz = 1, kon = x0;
  while (pocz < kon) {
    int srod = (pocz + kon + 1) / 2;
    if (zapytanie(srod, 1, x0, n) < q)
      kon = srod - 1;
    else
      pocz = srod;
  }
  return pocz;
}
int znajdz_dolny_bok(int y0, int q) {
  int pocz = 1, kon = y0;
  while (pocz < kon) {
    int srod = (pocz + kon + 1) / 2;
    if (zapytanie(1, srod, n, y0) < q)
      kon = srod - 1;
    else
      pocz = srod;
  }
  return pocz;
}
void znajdz_lewy_dolny_rog(int x0, int y0, int q, int& x, int& y) {
  x = znajdz_lewy_bok(x0, q);
  y = znajdz_dolny_bok(y0, q);
}
void znajdz_prawy_dolny_rog(int x0, int y0, int q, int& x, int& y) {
  x = znajdz_prawy_bok(x0, q);
  y = znajdz_dolny_bok(y0, q);
}
void znajdz_lewy_gorny_rog(int x0, int y0, int q, int& x, int& y) {
  x = znajdz_lewy_bok(x0, q);
  y = znajdz_gorny_bok(y0, q);
}
void zrob_test() {
  cin >> n;
  int x1, y1, x2, y2;
  znajdz_prawy_gorny_rog(1, 1, 2, x2, y2);
  znajdz_lewy_dolny_rog(n, n, 2, x1, y1);
  int x3, y3;
  znajdz_prawy_gorny_rog(x1, y1, 1, x3, y3);
  int xl = znajdz_prawy_bok(x1, 1), xp = znajdz_lewy_bok(x2, 1);
  int yd = znajdz_gorny_bok(y1, 1), yg = znajdz_dolny_bok(y2, 1);
  if (y1 == y2 || (zapytanie(x1, y1, xl, y2 - 1) == 0 &&
                   zapytanie(x1, y1 + 1, xl, y2) == 0))
    koniec(x1, y1, xl, y2, xp, yg, x2, yd);
  else if (x1 == x2 || (zapytanie(x1 + 1, yg, x2, y2) == 0 &&
                        zapytanie(x1, yg, x2 - 1, y2) == 0))
    koniec(x1, yg, x2, y2, xp, y1, xl, yd);
  else if (zapytanie(xp, y1 + 1, x2, y2) == 0 &&
           zapytanie(xp, y1, x2, y2 - 1) == 0)
    koniec(xp, y1, x2, y2, x1, yg, xl, yd);
  else if (zapytanie(x1 + 1, y1, x2, yd) == 0 &&
           zapytanie(x1, y1, x2 - 1, yd) == 0)
    koniec(x1, y1, x2, yd, xp, yg, xl, y2);
  else if (zapytanie(x1, y1, x3, y3) == 1) {
    koniec(x1, y1, x3, y3, xp, yg, x2, y2);
  } else {
    koniec(x1, yg, xl, y2, xp, y1, x2, yd);
  }
}
int main() {
  zrob_test();
  return 0;
}
