#include #include using namespace std; using ll = long long; #define rep(i, n) for (int i = 0; i < (int)(n); i++) const ll INF = 1e18; using S = ll; S op(S l, S r) { return min(l, r); } S e() { return INF; } void solve() { ll n; cin >> n; vector a(n), b(n, 0), c(n, 0); atcoder::segtree seg(n); rep(i, n) { cin >> a[i], a[i]--; seg.set(a[i], i); } auto dfs = [&](auto self, ll i, ll l, ll r, ll d) -> void { b[i] = d; rep(t, 2) { ll nl, nr; if (t == 0) { nl = l, nr = a[i]; } else { nl = a[i] + 1, nr = r; } ll j = seg.prod(nl, nr); if (j < INF) { self(self, j, nl, nr, d + 1); c[i] += c[j] + 1; } } }; dfs(dfs, 0, 0, n, 0); rep(i, n) cout << (i ? " " : "") << b[i]; cout << '\n'; rep(i, n) cout << (i ? " " : "") << c[i]; cout << '\n'; } int main() { std::cin.tie(nullptr); std::ios_base::sync_with_stdio(false); int T = 1; for (int t = 0; t < T; t++) { solve(); } return 0; }