You are given two arrays a and b, both of length n. All elements of both arrays are from 0 to n-1.

You can reorder elements of the array b (if you want, you may leave the order of elements as it is). After that, let array c be the array of length n, the i-th element of this array is c_i = (a_i + b_i) \% n, where x \% y is x modulo y.

Your task is to reorder elements of the array b to obtain the lexicographically minimum possible array c.

Array x of length n is lexicographically less than array y of length n, if there exists such i (1 ≤ i ≤ n), that x_i < y_i, and for any j (1 ≤ j < i) x_j = y_j.

Input

The first line of the input contains one integer n (1 ≤ n ≤ 2 ⋅ 10^5) — the number of elements in a, b and c.

The second line of the input contains n integers a_1, a_2, ..., a_n (0 ≤ a_i < n), where a_i is the i-th element of a.

The third line of the input contains n integers b_1, b_2, ..., b_n (0 ≤ b_i < n), where b_i is the i-th element of b.

Output

Print the lexicographically minimum possible array c. Recall that your task is to reorder elements of the array b and obtain the lexicographically minimum possible array c, where the i-th element of c is c_i = (a_i + b_i) \% n.

Examples

Input


4
0 1 2 1
3 2 1 1


Output


1 0 0 2 


Input


7
2 5 1 5 3 4 3
2 4 3 5 6 5 1


Output


0 0 0 1 0 2 4 
import java.io.*;
import java.util.*;


public class Main{

  static int[] c;

  public static void main(String[] args) throws IOException{
    PrintWriter os = new PrintWriter(System.out);
    int n = R.B(), i, j;
    int[] a = new int[n], b = new int[n];
    

    for (i = 0; i<n; i++){a[i] = R.B();}
    for (i = 0; i<n; i++){b[R.B()]++;}
    R.a.close();

    for (i = 0; i<n; i++){
      if (i%1000==0){c = G(b, n);}
      j = F(n-a[i], b, n);
      b[j]--;
      if (b[j]==0){if (j<n-1){c[j] = c[j+1];} else{c[j] = 0;}}
      os.print((j+a[i])%n);
      os.print(' ');
    }

    os.flush();
  }

  private static int F(int a, int[] b, int n){
    if (a==n){a = 0;}
    while (true){if (c[a] == a){return a;} else{a = c[a];}}
  }

  private static int[] G(int[] a, int n){
    int i, c = 0;
    int[] b = new int[n];
    for (i = n-1; i>-1; i--){if (a[i]>0){b[i] = i; c = i;}else{b[i] = c;}}
    return b;
  }
}


final class R{
  public static BufferedReader a = new BufferedReader(new InputStreamReader(System.in));
  private static StringTokenizer b;
  public static String A() throws IOException{while (b == null || !b.hasMoreTokens()) try {b = new StringTokenizer(a.readLine());} catch (Exception e){e.printStackTrace();}
    return b.nextToken();}
  public static int B() throws IOException{return Integer.parseInt(A());}
}