#include <bits/stdc++.h>   using namespace std;   class R {    public:     int l;     int r;     int t;     int b;     R(int l, int r, int t, int b) {       this->l = l;       this->r = r;       this->b = b;       this->t = t;     }   };   int ask(int x1, int x2, int y1, int y2) {     cout <<  ?   << x1 <<     << y1 <<     << x2 <<     << y2 << endl;     fflush(stdout);     int ans;     cin >> ans;     return ans;   }   int askR(R r) {     cout <<  ?   << r.l <<     << r.t <<     << r.r <<     << r.b << endl;     fflush(stdout);     int ans;     cin >> ans;     return ans;   }   bool check(R other, R border) {     if (other.t >= border.t && other.l >= border.l && other.r <= border.r &&         other.b <= border.b)       return true;     return false;   }   void solveBot(R& r, R other) {     int left = r.t;     int right = r.b;     while (right - left > 1) {       int m = (right + left) / 2;       int a = ask(r.l, r.r, r.t, m);       if (a == 2 || (a == 1 && !check(other, R(r.l, r.r, r.t, m)))) {         right = m;         continue;       }       left = m;     }     int a = ask(r.l, r.r, r.t, left);     if (a == 2 || (a == 1 && !check(other, R(r.l, r.r, r.t, left)))) {       R rr = R(r.l, r.r, r.t, left);       r = rr;       return;     }     R rr = R(r.l, r.r, r.t, right);     r = rr;   }   void solveRight(R& r, R other) {     int left = r.l;     int right = r.r;     while (right - left > 1) {       int m = (right + left) / 2;       int a = ask(r.l, m, r.t, r.b);       if (a == 2 || (a == 1 && !check(other, R(r.l, m, r.t, r.b)))) {         right = m;         continue;       }       left = m;     }     int a = ask(r.l, left, r.t, r.b);     if (a == 2 || (a == 1 && !check(other, R(r.l, left, r.t, r.b)))) {       R rr = R(r.l, left, r.t, r.b);       r = rr;       return;     }     R rr = R(r.l, right, r.t, r.b);     r = rr;   }   void solveLeft(R& r, R other) {     int left = r.l;     int right = r.r;     while (right - left > 1) {       int m = (right + left) / 2;       int a = ask(m, r.r, r.t, r.b);       if (a == 2 || (a == 1 && !check(other, R(m, r.r, r.t, r.b)))) {         left = m;         continue;       }       right = m;     }     int a = ask(right, r.r, r.t, r.b);     if (a == 2 || (a == 1 && !check(other, R(right, r.r, r.t, r.b)))) {       R rr = R(right, r.r, r.t, r.b);       r = rr;       return;     }     R rr = R(left, r.r, r.t, r.b);     r = rr;   }   void solveTop(R& r, R other) {     int left = r.t;     int right = r.b;     while (right - left > 1) {       int m = (right + left) / 2;       int a = ask(r.l, r.r, m, r.b);       if (a == 2 || (a == 1 && !check(other, R(r.l, r.r, m, r.b)))) {         left = m;         continue;       }       right = m;     }     int a = ask(r.l, r.r, right, r.b);     if (a == 2 || (a == 1 && !check(other, R(r.l, r.r, right, r.b)))) {       R rr = R(r.l, r.r, right, r.b);       r = rr;       return;     }     R rr = R(r.l, r.r, left, r.b);     r = rr;   }   void solve(int n) {     R r = R(1, n, 1, n);     R fiks = R(-1, -1, -1, -1);     solveBot(r, fiks);     solveLeft(r, fiks);     solveRight(r, fiks);     solveTop(r, fiks);     R s = R(1, n, 1, n);     solveBot(s, r);     solveLeft(s, r);     solveRight(s, r);     solveTop(s, r);     cout <<  !   << r.l <<     << r.t <<     << r.r <<     << r.b;     cout <<     << s.l <<     << s.t <<     << s.r <<     << s.b;   }   int main() {     int n;     cin >> n;     solve(n);     return 0;   }