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.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.TreeMap;
import java.io.IOException;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author Indrajit Sinha
 */
public class Main {
	public static void main(String[] args) {
		InputStream inputStream = System.in;
		OutputStream outputStream = System.out;
		InputReader in = new InputReader(inputStream);
		PrintWriter out = new PrintWriter(outputStream);
		EMinimumArray solver = new EMinimumArray();
		solver.solve(1, in, out);
		out.close();
	}

	static class EMinimumArray {
		int n;
		PrintWriter out;
		InputReader in;

		public void solve(int testNumber, InputReader in, PrintWriter out) {
			int t, i, j, tt, k;
			this.out = out;
			this.in = in;
			n = ni();
			int a[] = new int[n];
			int b[] = new int[n];
			for (i = 0; i < n; i++) {
				a[i] = in.nextInt();
			}
			TreeMap<Integer, Integer> tm = new TreeMap<>();
			for (i = 0; i < n; i++) {
				b[i] = in.nextInt();
				if (tm.containsKey(b[i]))
					tm.put(b[i], tm.get(b[i]) + 1);
				else
					tm.put(b[i], 1);
			}
			int c[] = new int[n];
			for (i = 0; i < n; i++) {
				int mn = (a[i] + tm.firstKey()) % n;
				int x = n - a[i];
				if (tm.ceilingKey(x) == null) {
					c[i] = (a[i] + tm.firstKey()) % n;
					if (tm.get(tm.firstKey()) == 1)
						tm.remove(tm.firstKey());
					else {
						tm.put(tm.firstKey(), -1 + tm.get(tm.firstKey()));
					}
				} else {
					int yu = tm.ceilingKey(x);
					int jj = tm.firstKey();
					int xp = (tm.ceilingKey(x) + a[i]) % n;
					if (xp < mn) {
						c[i] = xp;
						if (tm.get(yu) == 1)
							tm.remove(yu);
						else {
							tm.put(yu, -1 + tm.get(yu));
						}
					} else {
						c[i] = mn;
						if (tm.get(tm.firstKey()) == 1)
							tm.remove(tm.firstKey());
						else {
							tm.put(tm.firstKey(), -1 + tm.get(tm.firstKey()));
						}
					}
				}
			}
			for (i = 0; i < n; i++) {
				p(c[i]);
			}
			pn("");
		}

		int ni() {
			return in.nextInt();
		}

		void pn(String zx) {
			out.println(zx);
		}

		void p(int zx) {
			out.print(zx + " ");
		}

	}

	static class InputReader {
		private InputStream stream;
		private byte[] buf = new byte[1024];
		private int curChar;
		private int numChars;

		public InputReader(InputStream stream) {
			this.stream = stream;
		}

		public int read() {
			if (numChars == -1) {
				throw new UnknownError();
			}
			if (curChar >= numChars) {
				curChar = 0;
				try {
					numChars = stream.read(buf);
				} catch (IOException e) {
					throw new UnknownError();
				}
				if (numChars <= 0) {
					return -1;
				}
			}
			return buf[curChar++];
		}

		public int nextInt() {
			return Integer.parseInt(next());
		}

		public String next() {
			int c = read();
			while (isSpaceChar(c)) {
				c = read();
			}
			StringBuffer res = new StringBuffer();
			do {
				res.appendCodePoint(c);
				c = read();
			} while (!isSpaceChar(c));

			return res.toString();
		}

		private boolean isSpaceChar(int c) {
			return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
		}

	}
}

