# Conversion of raphael_v2.cpp in python
# O(N * log(N))

def build_segment_tree(tree, v, tl, tr):
    if tl == tr:
        tree[v] = 1
    else:
        middle = (tl + tr) // 2
        build_segment_tree(tree, v * 2, tl, middle)
        build_segment_tree(tree, v * 2 + 1, middle + 1, tr)
        tree[v] = tree[v * 2] + tree[v * 2 + 1]


def  get_kth(tree, v, tl, tr, k):
    if tl == tr:
        return tl
    tm = (tl + tr) // 2
    count_left = tree[v * 2]
    count_right = tree[v * 2 + 1]
    if count_left >= k:
        return get_kth(tree, v * 2, tl, tm, k)
    else:
        return get_kth(tree, v * 2 + 1, tm + 1, tr, k - count_left)


def update(tree, v, tl, tr, pos, new_val):
  if tl == tr:
      tree[v] = new_val
  else:
      tm = (tl + tr) // 2
      if pos <= tm:
          update(tree, v * 2, tl, tm, pos, new_val)
      else:
          update(tree, v * 2 + 1, tm + 1, tr, pos, new_val)
      tree[v] = tree[v * 2] + tree[v * 2 + 1];


def pick_players(choices):
    teams = [[], []]
    N = len(choices[0]) * 2

    tree = [0] * (4 * N)
    build_segment_tree(tree, 1, 0, N - 1)
    for i in range(N // 2):
        for team in range(2):
            player = get_kth(tree, 1, 0, N - 1, choices[team][i])
            update(tree, 1, 0, N - 1, player, 0)
            player += 1
            teams[team].append(player)
    return tuple(teams)


def main():
    N = int(input())
    assert N % 2 == 0
    choices = [[], []]
    for team in range(2):
        for choice in input().split():
            choice = int(choice)
            choices[team].append(choice)
    teams = pick_players(tuple(choices))
    for team in teams:
        for player in team:
            print(player, end=' ')
        print()

if __name__ == '__main__':
    main()
