#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
int query(int l, int d, int r, int u) {
  printf("? %d %d %d %d\n", l, d, r, u);
  fflush(stdout);
  int cnt = 0;
  scanf("%d", &cnt);
  return cnt;
}
int main(void) {
  int l1, r1, l2, r2, u1, u2, d1, d2, n;
  scanf("%d", &n);
  int l = 1, r = n;
  while (l <= r) {
    int mid = (l + r) >> 1;
    int cnt = query(1, 1, mid, n);
    if (cnt == 2) {
      r1 = mid;
      r = mid - 1;
    } else {
      l = mid + 1;
    }
  }
  l = 1, r = n;
  while (l <= r) {
    int mid = (l + r) >> 1;
    int cnt = query(1, 1, mid, n);
    if (cnt >= 1) {
      r2 = mid;
      r = mid - 1;
    } else {
      l = mid + 1;
    }
  }
  l = 1, r = n;
  while (l <= r) {
    int mid = (l + r) >> 1;
    int cnt = query(mid, 1, n, n);
    if (cnt == 2) {
      l1 = mid;
      l = mid + 1;
    } else {
      r = mid - 1;
    }
  }
  l = 1, r = n;
  while (l <= r) {
    int mid = (l + r) >> 1;
    int cnt = query(mid, 1, n, n);
    if (cnt >= 1) {
      l2 = mid;
      l = mid + 1;
    } else {
      r = mid - 1;
    }
  }
  l = 1, r = n;
  while (l <= r) {
    int mid = (l + r) >> 1;
    int cnt = query(1, 1, n, mid);
    if (cnt == 2) {
      u1 = mid;
      r = mid - 1;
    } else {
      l = mid + 1;
    }
  }
  l = 1, r = n;
  while (l <= r) {
    int mid = (l + r) >> 1;
    int cnt = query(1, 1, n, mid);
    if (cnt >= 1) {
      u2 = mid;
      r = mid - 1;
    } else {
      l = mid + 1;
    }
  }
  l = 1, r = n;
  while (l <= r) {
    int mid = (l + r) >> 1;
    int cnt = query(1, mid, n, n);
    if (cnt == 2) {
      d1 = mid;
      l = mid + 1;
    } else {
      r = mid - 1;
    }
  }
  l = 1, r = n;
  while (l <= r) {
    int mid = (l + r) >> 1;
    int cnt = query(1, mid, n, n);
    if (cnt >= 1) {
      d2 = mid;
      l = mid + 1;
    } else {
      r = mid - 1;
    }
  }
  if (l2 > r2) {
    int cnt = 0;
    if (u2 < d2) {
      cnt = query(l2, d2, r1, u1);
      if (cnt == 1) {
        printf("! %d %d %d %d %d %d %d %d", l2, d2, r1, u1, l1, d1, r2, u2);
        fflush(stdout);
        return 0;
      } else {
        printf("! %d %d %d %d %d %d %d %d", l2, d1, r1, u2, l1, d2, r2, u1);
        fflush(stdout);
        return 0;
      }
    } else {
      cnt = query(l2, d2, r1, u2);
      if (cnt == 1) {
        printf("! %d %d %d %d %d %d %d %d", l2, d2, r1, u2, l1, d1, r2, u1);
        fflush(stdout);
        return 0;
      }
      cnt = query(l2, d1, r1, u2);
      if (cnt == 1) {
        printf("! %d %d %d %d %d %d %d %d", l2, d1, r1, u2, l1, d2, r2, u1);
        fflush(stdout);
        return 0;
      }
      cnt = query(l2, d2, r1, u1);
      if (cnt == 1) {
        printf("! %d %d %d %d %d %d %d %d", l2, d2, r1, u1, l1, d1, r2, u2);
        fflush(stdout);
        return 0;
      }
      printf("! %d %d %d %d %d %d %d %d", l2, d1, r1, u1, l1, d2, r2, u2);
      fflush(stdout);
      return 0;
    }
  } else {
    int cnt = 0;
    if (r2 < l2) {
      cnt = query(l2, d2, r1, u1);
      if (cnt == 1) {
        printf("! %d %d %d %d %d %d %d %d", l2, d2, r1, u1, l1, d1, r2, u2);
        fflush(stdout);
        return 0;
      } else {
        printf("! %d %d %d %d %d %d %d %d", l1, d2, r2, u1, l2, d1, r1, u2);
        fflush(stdout);
        return 0;
      }
    } else {
      cnt = query(l2, d2, r2, u1);
      if (cnt == 1) {
        printf("! %d %d %d %d %d %d %d %d", l2, d2, r2, u1, l1, d1, r1, u2);
        fflush(stdout);
        return 0;
      }
      cnt = query(l2, d2, r1, u1);
      if (cnt == 1) {
        printf("! %d %d %d %d %d %d %d %d", l2, d2, r1, u1, l1, d1, r2, u2);
        fflush(stdout);
        return 0;
      }
      cnt = query(l1, d2, r2, u1);
      if (cnt == 1) {
        printf("! %d %d %d %d %d %d %d %d", l1, d2, r2, u1, l2, d1, r1, u2);
        fflush(stdout);
        return 0;
      }
      printf("! %d %d %d %d %d %d %d %d", l1, d2, r1, u1, l2, d1, r2, u2);
      fflush(stdout);
      return 0;
    }
  }
  return 0;
}
