OI XXXII - por

// 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;
}