func_code_string: #include <bits/stdc++.h>   using namespace std;   // #include <atcoder/all>   // using namespace atcoder;      #define rep(i,n) for (int i = 0; i < (n); ++i)   #define STRING(str) #str   #define ll long long   #define ld long double      template <typename T>   void print(T x, string name) {    cout << name+ :   << x << endl;   }      template <typename T >   void print_vec_1d(vector<T> x, string name) {    cout << name << endl;    cout <<  [  ;    for (int i=0;i<x.size();i++) {     cout << x[i];     if (i != x.size()-1) cout <<  ,  ;     else cout <<   ]  << endl;    }   }      template <typename T >   void print_vec_2d(vector<vector<T>> x, string name) {    cout << name << endl;    cout <<  [  ;    for (int i=0;i<x.size();i++) {     cout <<  [  ;     for (int j=0;j<x[i].size();j++) {      cout << x[i][j];      if (j != x[i].size()-1) cout <<  ,  ;      else {       cout <<   ] ;       if (!((i == x.size()-1) && (j == x[i].size()-1))) {        cout <<  ,  << endl;       }      }     }    }    cout <<   ]  << endl;   }      template <typename T >   void print_vec_3d(vector<vector<vector<T>>> x, string name) {    cout << name << endl;    cout <<  [  ;    for (int i=0;i<x.size();i++) {     cout <<  [  ;     for (int j=0;j<x[i].size();j++) {      cout <<  [  ;      for (int k=0;k<x[i][j].size();k++) {       cout << x[i][j][k];       if (k != x[i][j].size()-1) cout <<  ,  ;       else {        cout <<   ] ;        if (!((i == x.size()-1) && (j == x[i].size()-1) && (k == x[i][j].size()-1))) {         cout <<  ,  << endl;        }       }      }      if (j != x[i].size()-1) cout <<  ,  ;      else {       cout <<   ] ;       if (!((i == x.size()-1) && (j == x[i].size()-1))) {        cout <<  ,  << endl;       }      }     }    }    cout <<   ]  << endl;   }      int main() {    // ios::sync_with_stdio(0);    // cin.tie(0);       int n;    cin >> n;    int ind_2;    cout <<  ? 1   << n <<   n ;    cin >> ind_2;    ind_2--;       int a1, a2;    if (ind_2 != 0 && ind_2 != n-1) {     cout <<  ? 1   << ind_2+1 <<   n ;     cin >> a1;     a1--;        int a2;     cout <<  ?   << ind_2+1 <<     << n <<   n ;     cin >> a2;     a2--;    }       bool left_flag;    if (ind_2 == n-1) {     left_flag = true;    } else if (ind_2 == 0) {     left_flag = false;    } else if (ind_2 == a1) {     left_flag = true;    } else { // ind_2 == a2     left_flag = false;    }    if (left_flag) {     // ? ? ? 1 ? ? ? 2 ? ? ? ?     int ok = 0;     int ng = ind_2;     while (abs(ok-ng) > 1) {      int mid = (ok+ng)/2;      int b;      cout <<  ?   << mid+1 <<     << ind_2+1 <<   n ;      cin >> b;      b--;      if (b == ind_2) {       ok = mid;      } else {       ng = mid;      }     }     cout <<  !   << ok+1 <<   n ;    } else {     // ? ? ? ? ? ? ? 2 ? 1 ? ?     int ok = n-1;     int ng = ind_2;     while (abs(ok-ng) > 1) {      int mid = (ok+ng)/2;      int b;      cout <<  ?   << ind_2+1 <<     << mid+1 <<   n ;      cin >> b;      b--;      if (b == ind_2) {       ok = mid;      } else {       ng = mid;      }     }     cout <<  !   << ok+1 <<   n ;    }    return 0;   }