#include <bits/stdc++.h>
using namespace std;
const long long INFLL = 1e18;
const int MAXN = 1e6 + 100;
const long long INF = 1e9;
const long long mod1 = 1e9 + 7;
const long long mod2 = 2e9 + 11;
int n;
pair<pair<int, int>, pair<int, int> > a = {{0, 0}, {0, 0}},
                                      b = {{0, 0}, {0, 0}};
pair<pair<int, int>, pair<int, int> > solve(int x, int y, int x1, int y1) {
  pair<pair<int, int>, pair<int, int> > ans;
  ans.first = {x, y};
  ans.second = {x1, y1};
  int l = x + 1, r = x1;
  while (l <= r) {
    int mid = (l + r) >> 1;
    cout << "? " << mid << " " << y << " " << x1 << " " << y1 << endl;
    int ok;
    cin >> ok;
    if (ok == 0) {
      r = mid - 1;
    } else {
      l = mid + 1;
      ans.first.first = mid;
    }
  }
  l = y + 1, r = y1;
  while (l <= r) {
    int mid = (l + r) >> 1;
    cout << "? " << x << " " << mid << " " << x1 << " " << y1 << endl;
    int ok;
    cin >> ok;
    if (ok == 0) {
      r = mid - 1;
    } else {
      l = mid + 1;
      ans.first.second = mid;
    }
  }
  l = y, r = y1 - 1;
  while (l <= r) {
    int mid = (l + r) >> 1;
    cout << "? " << x << " " << y << " " << x1 << " " << mid << endl;
    int ok;
    cin >> ok;
    if (ok == 0) {
      l = mid + 1;
    } else {
      r = mid - 1;
      ans.second.second = mid;
    }
  }
  l = x, r = x1 - 1;
  while (l <= r) {
    int mid = (l + r) >> 1;
    cout << "? " << x << " " << y << " " << mid << " " << y1 << endl;
    int ok;
    cin >> ok;
    if (ok == 0) {
      l = mid + 1;
    } else {
      r = mid - 1;
      ans.second.first = mid;
    }
  }
  return ans;
}
pair<pair<int, int>, pair<int, int> > solve1(int x, int y, int x1, int y1) {
  pair<pair<int, int>, pair<int, int> > ans;
  ans.first = {x, y};
  ans.second = {x1, y1};
  int l = x + 1, r = x1;
  while (l <= r) {
    int mid = (l + r) >> 1;
    cout << "? " << mid << " " << y << " " << x1 << " " << y1 << endl;
    int ok;
    cin >> ok;
    if (mid <= a.first.first && y <= a.first.second && x1 >= a.second.first &&
        y1 >= a.second.second)
      ok--;
    if (ok == 0) {
      r = mid - 1;
    } else {
      l = mid + 1;
      ans.first.first = mid;
    }
  }
  l = y + 1, r = y1;
  while (l <= r) {
    int mid = (l + r) >> 1;
    cout << "? " << x << " " << mid << " " << x1 << " " << y1 << endl;
    int ok;
    cin >> ok;
    if (x <= a.first.first && mid <= a.first.second && x1 >= a.second.first &&
        y1 >= a.second.second)
      ok--;
    if (ok == 0) {
      r = mid - 1;
    } else {
      l = mid + 1;
      ans.first.second = mid;
    }
  }
  l = y, r = y1 - 1;
  while (l <= r) {
    int mid = (l + r) >> 1;
    cout << "? " << x << " " << y << " " << x1 << " " << mid << endl;
    int ok;
    cin >> ok;
    if (x <= a.first.first && y <= a.first.second && x1 >= a.second.first &&
        mid >= a.second.second)
      ok--;
    if (ok == 0) {
      l = mid + 1;
    } else {
      r = mid - 1;
      ans.second.second = mid;
    }
  }
  l = x, r = x1 - 1;
  while (l <= r) {
    int mid = (l + r) >> 1;
    cout << "? " << x << " " << y << " " << mid << " " << y1 << endl;
    int ok;
    cin >> ok;
    if (x <= a.first.first && y <= a.first.second && mid >= a.second.first &&
        y1 >= a.second.second)
      ok--;
    if (ok == 0) {
      l = mid + 1;
    } else {
      r = mid - 1;
      ans.second.first = mid;
    }
  }
  return ans;
}
int main() {
  cin >> n;
  int l = 1, r = n;
  int ans = 1;
  pair<pair<int, int>, pair<int, int> > ha = {{0, 0}, {0, 0}};
  while (l <= r) {
    int mid = ((l + r) >> 1);
    cout << "? " << mid << " " << 1 << " " << n << " " << n << endl;
    int x;
    cin >> x;
    if (x == 2) {
      ans = mid;
      l = mid + 1;
    } else {
      if (x == 0) {
        r = mid - 1;
      } else {
        ha = {{mid, 1}, {n, n}};
        break;
      }
    }
  }
  if (ha.first.second != 0) {
    a = solve(ha.first.first, ha.first.second, ha.second.first,
              ha.second.second);
    b = solve1(1, 1, n, n);
  } else {
    l = 1, r = n;
    int anss = 1;
    ha = {{0, 0}, {0, 0}};
    while (l <= r) {
      int mid = ((l + r) >> 1);
      cout << "? " << ans << " " << mid << " " << n << " " << n << endl;
      int x;
      cin >> x;
      if (x == 2) {
        anss = mid;
        l = mid + 1;
      } else {
        if (x == 0) {
          r = mid - 1;
        } else {
          ha = {{ans, mid}, {n, n}};
          break;
        }
      }
    }
    a = solve(ha.first.first, ha.first.second, ha.second.first,
              ha.second.second);
    b = solve1(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;
}
