n = int(input()) A = list(map(int, input().split())) lst = [[-1, -1, -1] for _ in range(n)] id = 0 N = [[] for _ in range(n)] R = [[] for _ in range(n)] lst[0][0] = A[0] id = 1 D = {A[i]: i for i in range(n)} F = {A[0]: (0, 0)} O = [A[0]] from bisect import * for i in range(1, n): a = A[i] ind = bisect(O, a) c0 = (-1, -1) c1 = (-1, -1) if 0 <= ind-1 < len(O): a0 = O[ind-1] c0 = F[a0] if 0 <= ind < len(O): a1 = O[ind] c1 = F[a1] if c0[0] < c1[0]: now = c1[1] le = c1[0] else: now = c0[1] le = c0[0] pa, l, r = lst[now] if pa < a: N[D[pa]].append(i) R[i].append(D[pa]) lst[now][2] = id lst[id][0] = a id += 1 insort(O, a) else: N[D[pa]].append(i) R[i].append(D[pa]) lst[now][1] = id lst[id][0] = a id += 1 insort(O, a) F[a] = (le + 1, id-1) B = [0] * n C = [1] * n S = [0] E = [] while S: now = S.pop() E.append(now) for nxt in N[now]: B[nxt] = B[now] + 1 S.append(nxt) for e in E[::-1]: for nxt in R[e]: C[nxt] += C[e] for i in range(n): C[i] -= 1 print(*B) print(*C)