#include <bits/stdc++.h>
using namespace std;
map<pair<pair<int, int>, pair<int, int> >, int> m;
int main() {
  int n;
  scanf("%d", &n);
  int al, ar, bd, bu, xl, xr, yu, yd, low, high;
  al = xl = 1;
  ar = xr = n;
  bd = yd = 1;
  bu = yu = n;
  low = al;
  high = ar;
  int ans;
  while (low <= high) {
    int mid = (low + high + 1) / 2;
    int res;
    if (m.find(make_pair(make_pair(mid, bd), make_pair(ar, bu))) != m.end())
      res = m[make_pair(make_pair(mid, bd), make_pair(ar, bu))];
    else {
      printf("? %d %d %d %d\n", mid, bd, ar, bu);
      fflush(stdout);
      scanf("%d", &res);
      m[make_pair(make_pair(mid, bd), make_pair(ar, bu))] = res;
    }
    if (res == 0)
      high = mid - 1;
    else {
      ans = mid;
      low = mid + 1;
    }
  }
  al = ans;
  low = al;
  high = ar;
  while (low <= high) {
    int mid = (low + high + 1) / 2;
    int res;
    if (m.find(make_pair(make_pair(al, bd), make_pair(mid, bu))) != m.end())
      res = m[make_pair(make_pair(al, bd), make_pair(mid, bu))];
    else {
      printf("? %d %d %d %d\n", al, bd, mid, bu);
      fflush(stdout);
      scanf("%d", &res);
      m[make_pair(make_pair(al, bd), make_pair(mid, bu))] = res;
    }
    if (res == 0)
      low = mid + 1;
    else {
      ans = mid;
      high = mid - 1;
    }
  }
  ar = ans;
  low = xl;
  high = xr;
  while (low <= high) {
    int mid = (low + high + 1) / 2;
    int res;
    if (m.find(make_pair(make_pair(mid, yd), make_pair(xr, yu))) != m.end())
      res = m[make_pair(make_pair(mid, yd), make_pair(xr, yu))];
    else {
      printf("? %d %d %d %d\n", mid, yd, xr, yu);
      fflush(stdout);
      scanf("%d", &res);
      m[make_pair(make_pair(mid, yd), make_pair(xr, yu))] = res;
    }
    if (((al >= mid) && (al <= xr)) && ((ar >= mid) && (ar <= xr))) res--;
    if (res == 0)
      high = mid - 1;
    else {
      ans = mid;
      low = mid + 1;
    }
  }
  xl = ans;
  low = xl;
  high = xr;
  while (low <= high) {
    int mid = (low + high + 1) / 2;
    int res;
    if (m.find(make_pair(make_pair(xl, yd), make_pair(mid, yu))) != m.end())
      res = m[make_pair(make_pair(xl, yd), make_pair(mid, yu))];
    else {
      printf("? %d %d %d %d\n", xl, yd, mid, yu);
      fflush(stdout);
      scanf("%d", &res);
      m[make_pair(make_pair(xl, yd), make_pair(mid, yu))] = res;
    }
    if (((al >= xl) && (al <= mid)) && ((ar >= xl) && (ar <= mid))) res--;
    if (res == 0)
      low = mid + 1;
    else {
      ans = mid;
      high = mid - 1;
    }
  }
  xr = ans;
  low = bd;
  high = bu;
  while (low <= high) {
    int mid = (low + high + 1) / 2;
    int res;
    if (m.find(make_pair(make_pair(al, mid), make_pair(ar, bu))) != m.end())
      res = m[make_pair(make_pair(al, mid), make_pair(ar, bu))];
    else {
      printf("? %d %d %d %d\n", al, mid, ar, bu);
      fflush(stdout);
      scanf("%d", &res);
      m[make_pair(make_pair(al, mid), make_pair(ar, bu))] = res;
    }
    if (((xl >= al) && (xl <= ar)) && ((xr >= al) && (xr <= ar))) {
      if (((yd >= mid) && (yd <= bu)) && ((yu >= mid) && (yu <= bu))) res--;
    }
    if (res == 0)
      high = mid - 1;
    else {
      ans = mid;
      low = mid + 1;
    }
  }
  bd = ans;
  low = bd;
  high = bu;
  while (low <= high) {
    int mid = (low + high + 1) / 2;
    int res;
    if (m.find(make_pair(make_pair(al, bd), make_pair(ar, mid))) != m.end())
      res = m[make_pair(make_pair(al, bd), make_pair(ar, mid))];
    else {
      printf("? %d %d %d %d\n", al, bd, ar, mid);
      fflush(stdout);
      scanf("%d", &res);
      m[make_pair(make_pair(al, bd), make_pair(ar, mid))] = res;
    }
    if (((xl >= al) && (xl <= ar)) && ((xr >= al) && (xr <= ar))) {
      if (((yd >= bd) && (yd <= mid)) && ((yu >= bd) && (yu <= mid))) res--;
    }
    if (res == 0)
      low = mid + 1;
    else {
      ans = mid;
      high = mid - 1;
    }
  }
  bu = ans;
  low = yd;
  high = yu;
  while (low <= high) {
    int mid = (low + high + 1) / 2;
    int res;
    if (m.find(make_pair(make_pair(xl, mid), make_pair(xr, yu))) != m.end())
      res = m[make_pair(make_pair(xl, mid), make_pair(xr, yu))];
    else {
      printf("? %d %d %d %d\n", xl, mid, xr, yu);
      fflush(stdout);
      scanf("%d", &res);
      m[make_pair(make_pair(xl, mid), make_pair(xr, yu))] = res;
    }
    if (((al >= xl) && (al <= xr)) && ((ar >= xl) && (ar <= xr))) {
      if (((bd >= mid) && (bd <= yu)) && ((bu >= mid) && (bu <= yu))) res--;
    }
    if (res == 0)
      high = mid - 1;
    else {
      ans = mid;
      low = mid + 1;
    }
  }
  yd = ans;
  low = yd;
  high = yu;
  while (low <= high) {
    int mid = (low + high + 1) / 2;
    int res;
    if (m.find(make_pair(make_pair(xl, yd), make_pair(xr, mid))) != m.end())
      res = m[make_pair(make_pair(xl, yd), make_pair(xr, mid))];
    else {
      printf("? %d %d %d %d\n", xl, yd, xr, mid);
      fflush(stdout);
      scanf("%d", &res);
      m[make_pair(make_pair(xl, yd), make_pair(xr, mid))] = res;
    }
    if (((al >= xl) && (al <= xr)) && ((ar >= xl) && (ar <= xr))) {
      if (((bd >= yd) && (bd <= mid)) && ((bu >= yd) && (bu <= mid))) res--;
    }
    if (res == 0)
      low = mid + 1;
    else {
      ans = mid;
      high = mid - 1;
    }
  }
  yu = ans;
  printf("! %d %d %d %d %d %d %d %d\n", al, bd, ar, bu, xl, yd, xr, yu);
  return 0;
}
