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.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.TreeSet;

public class E {

	static int N;
	static int[] A,B;
	public static void main(String[] args) {
		JS in = new JS();
		PrintWriter out = new PrintWriter(System.out);
		
		N = in.nextInt();
		A = new int[N];
		B = new int[N];
		for(int i = 0; i < N; i++) {
			A[i] = in.nextInt();
		}
		
		int cnt[] = new int[N+1];
		TreeSet<Integer> vals = new TreeSet<Integer>();
		for(int i = 0; i < N; i++) {
			B[i] = in.nextInt();
			vals.add(B[i]);
			cnt[B[i]]++;
		}
		
		int res[] = new int[N];
		for(int i = 0; i < N; i++) {
			int val = A[i];
			int target = N-A[i];
			if(vals.contains(target)) {
				cnt[target]--;
				if(cnt[target] == 0) vals.remove(target);
				res[i] = 0;
			}
			else {
				//way 1 is get min
				int min = vals.first();
				Integer other = vals.higher(target);
				
				if(other == null || (val+min)%N < (val+other)%N) {
					res[i] = (val+min)%N;
					cnt[min]--;
					if(cnt[min] == 0) vals.remove(min);
				}
				else {
					res[i] = (val+other)%N;
					cnt[other]--;
					if(cnt[other] == 0) vals.remove(other);
				}
				
			}
			out.print(res[i]+" ");
		}
		out.println();
		out.close();
	}
	
	
	

static class JS{
	public int BS = 1<<16;
	public char NC = (char)0;
	byte[] buf = new byte[BS];
	int bId = 0, size = 0;
	char c = NC;
	double num = 1;
	BufferedInputStream in;

	public JS() {
		in = new BufferedInputStream(System.in, BS);
	}

	public JS(String s) throws FileNotFoundException {
		in = new BufferedInputStream(new FileInputStream(new File(s)), BS);
	}

	public char nextChar(){
		while(bId==size) {
			try {
				size = in.read(buf);
			}catch(Exception e) {
				return NC;
			}				
			if(size==-1)return NC;
			bId=0;
		}
		return (char)buf[bId++];
	}

	public int nextInt() {
		return (int)nextLong();
	}

	public long nextLong() {
		num=1;
		boolean neg = false;
		if(c==NC)c=nextChar();
		for(;(c<'0' || c>'9'); c = nextChar()) {
			if(c=='-')neg=true;
		}
		long res = 0;
		for(; c>='0' && c <='9'; c=nextChar()) {
			res = (res<<3)+(res<<1)+c-'0';
			num*=10;
		}
		return neg?-res:res;
	}

	public double nextDouble() {
	    while(c!='.'&&c!='-'&&(c <'0' || c>'9')) c = nextChar();
	    boolean neg = c=='-';
	    if(neg)c=nextChar();
	    boolean fl = c=='.';
	    double cur = nextLong();
	    if(fl) return neg ? -cur/num : cur/num;
	    if(c == '.') {
		double next = nextLong();
		return neg ? -cur-next/num : cur+next/num;
	    }
	    else return neg ? -cur : cur;
	}

	public String next() {
		StringBuilder res = new StringBuilder();
		while(c<=32)c=nextChar();
		while(c>32) {
			res.append(c);
			c=nextChar();
		}
		return res.toString();
	}

	public String nextLine() {
		StringBuilder res = new StringBuilder();
		while(c<=32)c=nextChar();
		while(c!='\n') {
			res.append(c);
			c=nextChar();
		}
		return res.toString();
	}

	public boolean hasNext() {
		if(c>32)return true;
		while(true) {
			c=nextChar();
			if(c==NC)return false;
			else if(c>32)return true;
		}
	}
}

}
