#include <bits/stdc++.h>
#define ios ios::sync_with_stdio;cin.tie(0);cout.tie(0)
using namespace std;
const int N = 1e6+100;
struct node {
int u, v;
};
int n, p;
int dfn[N], cnt[N];
vector<node> lst;
void dfs(int pos) {
if(p > n) return ;
int id = dfn[pos];
for(int i = 0; i < cnt[id] - 1; i ++) {
++ p;
if(p > n) return ;
int neId = dfn[p];
int u = min(id, neId), v = max(id, neId);
lst.push_back({u, v});
dfs(p);
}
return ;
}
bool cmp(node &a, node &b) {
if(a.u == b.u) return a.v < b.v;
return a.u < b.u;
}
int main()
{
ios;
cin >> n;
for(int i = 1; i <= n; i ++) cin >> dfn[i];
for(int i = 1; i <= n; i ++) cin >> cnt[i];
p = 1;
dfs(1);
if(lst.size() > n - 1) return 0;
sort(lst.begin(), lst.end(), cmp);
for(int i = 0; i < lst.size(); i ++) {
cout << lst[i].u << " " << lst[i].v << '\n';
}
return 0;
}