#include <iostream>
#include <cstdlib>
#include <vector>
#include <cstdio>
#include <ios>
#include <map>
#include <set>
#include <algorithm>
#include <cstring>
#include <ctime>
#include <queue>
#include <cassert>
#include <cmath>
#include <string>
#include <stack>

using namespace std;
typedef long long ll;
typedef pair<int, int> pi;


vector< pi > v;

int assign(int cur, int l, int r){
    if(l == r){
        v.push_back(pi(-1, -1));
        return v.size() - 1;
    }
    int mid = (l+r) >> 1;
    int pos = v.size();
    v.push_back(pi(-1, -1));
    int lIdx = assign(cur<<1, l, mid);
    int rIdx = assign((cur<<1) + 1, mid+1, r);
    v[pos].first = lIdx;
    v[pos].second = rIdx;
    cout << v[pos].first << " " << v[pos].second << endl;
    return pos;
}


int main() {
#ifndef ONLINE_JUDGE
    freopen("in.in", "r", stdin);
#endif
    
    assign(1, 0, 10);
    
    
    return 0;
}