// Translated from nofar.cpp import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.Vector; public class Raphael { private static void read() throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); String[] line1 = br.readLine().split(" "); String[] line2 = br.readLine().split(" "); br.close(); int[] choices = new int[N]; for (int i = 0; i < N/2; i++) { choices[i * 2] = Integer.parseInt(line1[i]); } for (int i = 0; i < N/2; i++) { choices[i * 2 + 1] = Integer.parseInt(line2[i]); } int inner_size = (int)Math.pow(2, Math.ceil(Math.log(N) / Math.log(2))); int[] tree = new int[2 * inner_size]; for (int v = inner_size; v < inner_size + N; v++) { tree[v] = 1; } for (int v = inner_size - 1; v > 0; v--) { tree[v] = tree[2*v] + tree[2*v +1]; } int[] selected = new int[N]; for (int i=0; i0; u/=2) { tree[u]--; } selected[i] = v - inner_size + 1; } System.out.println(IntStream.range(0, N / 2).mapToObj(i -> selected[2 * i] + "").collect(Collectors.joining(" "))); System.out .println(IntStream.range(0, N / 2).mapToObj(i -> selected[2 * i + 1] + "").collect(Collectors.joining(" "))); } public static void main(String[] args) throws IOException { read(); } }