func_code_string: #include <bits/stdc++.h>   using namespace std;   int read_number(int i) {     cout <<  ?   << i <<   n ;     fflush(stdout);     int number;     cin >> number;     return number;   }   bool intersects(int l1, int l2, int r1, int r2) {     if (l1 >= l2) swap(l1, l2);     if (r1 >= r2) swap(r2, r1);     return max(l1, r1) <= min(l2, r2);   }   bool contains(int l1, int l2, int r1, int r2) {     if (l1 >= l2) swap(l1, l2);     if (r1 >= r2) swap(r1, r2);     return (l1 <= r1 && l2 >= r2) || (r1 <= l1 && l2 <= r2);   }   bool dif(int l1, int l2, int r1, int r2) { return (l2 - l1) * (r2 - r1) <= 0; }   bool solution(int l1, int l2, int r1, int r2) {     return (dif(l1, l2, r1, r2) && intersects(l1, l2, r1, r2)) ||            contains(l1, l2, r1, r2);   }   int main() {     int n;     cin >> n;     if ((n / 2) % 2 == 1) {       cout <<  ! -1 n ;       return 0;     }     int l1 = read_number(1);     int r1 = read_number(n / 2 + 1);     int l2 = r1;     int r2 = l1;     int min_l1 = 1;     int max_l1 = n / 2 + 1;     int min_r1 = n / 2 + 1;     int max_r2 = n + 1;     if (l1 == r1) {       cout <<  !   << l1 <<   n ;       return 0;     }     while (true) {       int med_l1 = (1 + min_l1 + max_l1) / 2;       int med_r2 = (1 + min_r1 + max_r2) / 2;       int temp_l1 = read_number(med_l1);       int temp_r1 = read_number(med_r2);       if (temp_l1 == temp_r1) {         cout <<  !   << med_l1 <<   n ;         return 0;       }       if (solution(l1, temp_l1, r1, temp_r1)) {         l2 = temp_l1;         r2 = temp_r1;         max_l1 = med_l1;         max_r2 = med_r2;       } else {         l1 = temp_l1;         r1 = temp_r1;         min_l1 = med_l1;         min_r1 = med_r2;       }     }     return 0;   }   