#include <bits/stdc++.h>
using namespace std;
template <class S, class T>
ostream& operator<<(ostream& os, const pair<S, T> v) {
  os << "(" << v.first << ", " << v.second << ")";
  return os;
}
template <class T>
ostream& operator<<(ostream& os, const vector<T> v) {
  for (int i = 0; i < v.size(); i++) {
    if (i > 0) {
      os << " ";
    }
    os << v[i];
  }
  return os;
}
template <class T>
ostream& operator<<(ostream& os, const vector<vector<T>> v) {
  for (int i = 0; i < v.size(); i++) {
    if (i > 0) {
      os << endl;
    }
    os << v[i];
  }
  return os;
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  int n;
  cin >> n;
  bool flag_tate = false, flag_yoko = false;
  int odd_tate[2];
  int odd_tate_ind = 0;
  int odd_yoko[2];
  int odd_yoko_ind = 0;
  for (int i = 0; i < (int)n; ++i) {
    printf("? %d %d %d %d\n", 1, i + 1, n, i + 1);
    fflush(stdout);
    int tmp;
    cin >> tmp;
    if (tmp % 2 == 1) {
      flag_tate = true;
      odd_tate[odd_tate_ind] = (i + 1);
      odd_tate_ind++;
    }
  }
  for (int i = 0; i < (int)n; ++i) {
    printf("? %d %d %d %d\n", i + 1, 1, i + 1, n);
    fflush(stdout);
    int tmp;
    cin >> tmp;
    if (tmp % 2 == 1) {
      flag_yoko = true;
      odd_yoko[odd_yoko_ind] = (i + 1);
      odd_yoko_ind++;
    }
  }
  if (flag_tate && flag_yoko) {
    printf("? %d %d %d %d\n", odd_yoko[0], odd_tate[0], odd_yoko[0],
           odd_tate[0]);
    fflush(stdout);
    int tmp;
    cin >> tmp;
    if (tmp % 2 == 1) {
      printf("! %d %d %d %d\n", odd_yoko[0], odd_tate[0], odd_yoko[1],
             odd_tate[1]);
      fflush(stdout);
    } else {
      printf("! %d %d %d %d\n", odd_yoko[0], odd_tate[1], odd_yoko[1],
             odd_tate[0]);
      fflush(stdout);
    }
  } else if (flag_tate) {
    int lb = 1, ub = n;
    while (lb != ub) {
      int m = (lb + ub) / 2;
      printf("? %d %d %d %d\n", lb, odd_tate[0], m, odd_tate[0]);
      fflush(stdout);
      int tmp;
      cin >> tmp;
      if (tmp % 2 == 1) {
        ub = m;
      } else {
        lb = m + 1;
      }
    }
    printf("! %d %d %d %d\n", lb, odd_tate[0], lb, odd_tate[1]);
    fflush(stdout);
  } else {
    int lb = 1, ub = n;
    while (lb != ub) {
      int m = (lb + ub) / 2;
      printf("? %d %d %d %d\n", odd_yoko[0], lb, odd_yoko[0], m);
      fflush(stdout);
      int tmp;
      cin >> tmp;
      if (tmp % 2 == 1) {
        ub = m;
      } else {
        lb = m + 1;
      }
    }
    printf("! %d %d %d %d\n", odd_yoko[0], lb, odd_yoko[1], lb);
    fflush(stdout);
  }
  return 0;
}
