#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 1;
const long long LINF = 1e18 + 1;
int n;
int X1_1 = 1;
int Y1_1 = 1;
int X2_1 = 2;
int Y2_1 = 2;
int X1_2 = 4;
int Y1_2 = 4;
int X2_2 = 5;
int Y2_2 = 5;
int ask(int x1, int y1, int x2, int y2) {
  cout << "? " << x1 << " " << y1 << " " << x2 << " " << y2 << endl;
  int res;
  cin >> res;
  return res;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  int lx, rx, ly, ry;
  {
    int left = 0;
    int right = n;
    while (right - left > 1) {
      int mid = (left + right) / 2;
      if (ask(1, 1, mid, n) == 2) {
        right = mid;
      } else {
        left = mid;
      }
    }
    rx = right;
  }
  {
    int left = 1;
    int right = n + 1;
    while (right - left > 1) {
      int mid = (left + right) / 2;
      if (ask(mid, 1, n, n) == 2) {
        left = mid;
      } else {
        right = mid;
      }
    }
    lx = left;
  }
  {
    int left = 0;
    int right = n;
    while (right - left > 1) {
      int mid = (left + right) / 2;
      if (ask(1, 1, n, mid) == 2) {
        right = mid;
      } else {
        left = mid;
      }
    }
    ry = right;
  }
  {
    int left = 1;
    int right = n + 1;
    while (right - left > 1) {
      int mid = (left + right) / 2;
      if (ask(1, mid, n, n) == 2) {
        left = mid;
      } else {
        right = mid;
      }
    }
    ly = left;
  }
  int bord_x;
  {
    int left = lx - 1;
    int right = rx;
    while (right - left > 1) {
      int mid = (left + right) / 2;
      if (ask(lx, ly, mid, ry) == 1) {
        right = mid;
      } else {
        left = mid;
      }
    }
    bord_x = right;
  }
  int bord_y;
  {
    int left = ly - 1;
    int right = ry;
    while (right - left > 1) {
      int mid = (left + right) / 2;
      if (ask(lx, ly, rx, mid) == 1) {
        right = mid;
      } else {
        left = mid;
      }
    }
    bord_y = right;
  }
  if (bord_x == rx || ask(bord_x + 1, ly, rx, ry) != 1) {
    if (bord_y == ry || ask(lx, bord_y + 1, rx, ry) != 1) {
      assert(false);
    }
    int y1_1 = ly;
    int y2_1 = bord_y;
    int x1_1, x2_1;
    {
      int left = lx - 1;
      int right = rx;
      while (right - left > 1) {
        int mid = (left + right) / 2;
        if (ask(lx, y1_1, mid, y2_1) == 1) {
          right = mid;
        } else {
          left = mid;
        }
      }
      x2_1 = right;
    }
    {
      int left = lx;
      int right = rx + 1;
      while (right - left > 1) {
        int mid = (left + right) / 2;
        if (ask(mid, y1_1, rx, y2_1) == 1) {
          left = mid;
        } else {
          right = mid;
        }
      }
      x1_1 = left;
    }
    int y1_2;
    int y2_2 = ry;
    int x1_2, x2_2;
    {
      int left = bord_y + 1;
      int right = ry + 1;
      while (right - left > 1) {
        int mid = (left + right) / 2;
        if (ask(lx, mid, rx, ry) == 1) {
          left = mid;
        } else {
          right = mid;
        }
      }
      y1_2 = left;
    }
    {
      int left = lx - 1;
      int right = rx;
      while (right - left > 1) {
        int mid = (left + right) / 2;
        if (ask(lx, y1_2, mid, y2_2) == 1) {
          right = mid;
        } else {
          left = mid;
        }
      }
      x2_2 = right;
    }
    {
      int left = lx;
      int right = rx + 1;
      while (right - left > 1) {
        int mid = (left + right) / 2;
        if (ask(mid, y1_2, rx, y2_2) == 1) {
          left = mid;
        } else {
          right = mid;
        }
      }
      x1_2 = left;
    }
    cout << "! " << x1_1 << " " << y1_1 << " " << x2_1 << " " << y2_1 << " "
         << x1_2 << " " << y1_2 << " " << x2_2 << " " << y2_2 << endl;
  } else {
    int x1_1 = lx;
    int x2_1 = bord_x;
    int y1_1, y2_1;
    {
      int left = ly - 1;
      int right = ry;
      while (right - left > 1) {
        int mid = (left + right) / 2;
        if (ask(x1_1, ly, x2_1, mid) == 1) {
          right = mid;
        } else {
          left = mid;
        }
      }
      y2_1 = right;
    }
    {
      int left = ly;
      int right = ry + 1;
      while (right - left > 1) {
        int mid = (left + right) / 2;
        if (ask(x1_1, mid, x2_1, ry) == 1) {
          left = mid;
        } else {
          right = mid;
        }
      }
      y1_1 = left;
    }
    int x1_2;
    int x2_2 = rx;
    int y1_2, y2_2;
    {
      int left = bord_x + 1;
      int right = rx + 1;
      while (right - left > 1) {
        int mid = (left + right) / 2;
        if (ask(mid, ly, rx, ry) == 1) {
          left = mid;
        } else {
          right = mid;
        }
      }
      x1_2 = left;
    }
    {
      int left = ly - 1;
      int right = ry;
      while (right - left > 1) {
        int mid = (left + right) / 2;
        if (ask(x1_2, ly, x2_2, mid) == 1) {
          right = mid;
        } else {
          left = mid;
        }
      }
      y2_2 = right;
    }
    {
      int left = ly;
      int right = ry + 1;
      while (right - left > 1) {
        int mid = (left + right) / 2;
        if (ask(x1_2, mid, x2_2, ry) == 1) {
          left = mid;
        } else {
          right = mid;
        }
      }
      y1_2 = left;
    }
    cout << "! " << x1_1 << " " << y1_1 << " " << x2_1 << " " << y2_1 << " "
         << x1_2 << " " << y1_2 << " " << x2_2 << " " << y2_2 << endl;
  }
  return 0;
}
