fce25a89163b6e18418bc4bee36c9700099d66eaea3c7222d09eb6c287e1dbf7
// https://szkopul.edu.pl/problemset/problem/QKm1pMst03HaHH8jB3defHTE/site/?key=statement
// Porządki
#include <bits/stdc++.h>
// #define GARY_DBG
#define GARY_LIB
constexpr int sizik = 10 * 1001;
#define ar std::array
typedef std::vector<std::vector<int>> _kra;
int X[sizik], P[sizik];
int na_ktorej_ziom[sizik];
int na_ktorej_ziom_rev[sizik];
int n;
std::set<int> s;
void build(int v, int tl, int tr) {
for (int i = 1; i <= n; i++) {
s.insert(i);
}
}
void update(int x) {
s.erase(x);
}
int query(int idx) {
auto ptr = s.begin();
while (idx > 0) {
ptr++;
idx--;
}
return *ptr;
}
void solve() {
std::cin >> n;
for (int i = 0; i < n; i++) {
int a = 1, b = 1 + i;
std::cout << a << " " << b << std::endl;
std::cin >> X[i];
}
build(1, 1, n);
for (int i = n; i >= 1; i--) {
int idx = (X[i - 1] - X[0] + i - 1);
assert(idx % 2 == 0);
idx >>= 1;
P[i] = query(idx);
update(P[i]);
}
na_ktorej_ziom[1] = P[n];
na_ktorej_ziom_rev[P[n]] = 1;
for (int i = 2; i <= n; i++) {
na_ktorej_ziom[i] = P[i - 1];
na_ktorej_ziom_rev[P[i - 1]] = i;
}
for (int i = 1; i <= n; i++) {
std::cout << i << " " << na_ktorej_ziom_rev[i] << std::endl;
na_ktorej_ziom_rev[na_ktorej_ziom[i]] = na_ktorej_ziom_rev[i];
na_ktorej_ziom[na_ktorej_ziom_rev[i]] = na_ktorej_ziom[i];
na_ktorej_ziom[i] = i;
na_ktorej_ziom_rev[i] = i;
int x;
std::cin >> x;
}
}
int32_t main() {
#ifndef GARY_DBG
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
#endif
int t = 1;
// std::cin >> t;
for (; t > 0; t--) {
solve();
}
return 0;
}