description: You are given three integers n, a, b. Determine if there exists a permutation p_1, p_2, …, p_n of integers from 1 to n, such that:
  
    * There are exactly a integers i with 2 ≤ i ≤ n-1 such that p_{i-1} < p_i > p_{i+1} (in other words, there are exactly a local maximums).
  
    * There are exactly b integers i with 2 ≤ i ≤ n-1 such that p_{i-1} > p_i < p_{i+1} (in other words, there are exactly b local minimums).
  
  
  
  
  If such permutations exist, find any such permutation.
  
  Input
  
  The first line of the input contains a single integer t (1 ≤ t ≤ 10^4) — the number of test cases. The description of test cases follows.
  
  The only line of each test case contains three integers n, a and b (2 ≤ n ≤ 10^5, 0 ≤ a,b ≤ n).
  
  The sum of n over all test cases doesn't exceed 10^5.
  
  Output
  
  For each test case, if there is no permutation with the requested properties, output -1.
  
  Otherwise, print the permutation that you are found. If there are several such permutations, you may print any of them.
  
  Example
  
  Input
  
  
  3
  4 1 1
  6 1 2
  6 4 0
  
  
  Output
  
  
  1 3 2 4
  4 2 3 1 5 6
  -1
  
  Note
  
  In the first test case, one example of such permutations is [1, 3, 2, 4]. In it p_1 < p_2 > p_3, and 2 is the only such index, and p_2> p_3 < p_4, and 3 the only such index.
  
  One can show that there is no such permutation for the third test case.
solution: import java.util.*;
  
  import java.io.*;
  
  public class tr0 {
  	static PrintWriter out;
  	static StringBuilder sb;
  	static long mod = (long) 998244353;
  	static long inf = (long) 1e16;
  	static int n, m;
  	static ArrayList<Integer>[] ad;
  	static int[][] remove, add;
  	static int[][][] memo;
  	static boolean vis[];
  	static long[] inv, f, ncr[];
  	static HashMap<Integer, Integer> hm;
  	static int[] pre, suf, Smax[], Smin[];
  	static int idmax, idmin;
  	static ArrayList<Integer> av;
  	static HashMap<Integer, Integer> mm;
  	static boolean[] msks;
  	static int[] lazy[], lazyCount;
  	static int[] dist;
  	static int[][] P;
  	static long N;
  	static ArrayList<Integer> gl;
  	static int[] a, b;
  	static String s;
  
  	public static void main(String[] args) throws Exception {
  		Scanner sc = new Scanner(System.in);
  		out = new PrintWriter(System.out);
  		int t = sc.nextInt();
  		all: while (t-- > 0) {
  			int n = sc.nextInt();
  			int a = sc.nextInt();
  			int b = sc.nextInt();
  			if (Math.abs(a - b) >= 2 || a + b > n - 2) {
  				out.println(-1);
  				continue;
  			}
  			if (a == 0 && b == 0) {
  				for (int i = 1; i <= n; i++)
  					out.print(i + " ");
  				out.println();
  				continue;
  			}
  			TreeSet<Integer> ts = new TreeSet<>();
  			for (int i = 0; i < n; i++)
  				ts.add(i + 1);
  			int[] ar = new int[n];
  			if (a == b) {
  				ar[0] = ts.pollFirst();
  				int c = 0;
  				for (int i = 1; i < n; i += 2) {
  					c++;
  					if (ts.isEmpty()) {
  						out.println(-1);
  						continue all;
  					}
  					ar[i] = ts.pollLast();
  					if (ts.isEmpty()) {
  						out.println(-1);
  						continue all;
  					}
  					ar[i + 1] = ts.pollFirst();
  					if (i + 1 == n - 1) {
  						out.println(-1);
  						continue all;
  					}
  					if (c == a) {
  						i += 2;
  						while (!ts.isEmpty()) {
  							ar[i] = ts.pollFirst();
  							i++;
  						}
  						break;
  					}
  				}
  				if (c < a) {
  					out.println(-1);
  					continue;
  				}
  			} else if (a > b) {
  				if (a == 1) {
  					ar[0] = ts.pollFirst();
  					int i = 1;
  					while (i < n) {
  						ar[i] = ts.pollLast();
  						i++;
  					}
  				} else {
  					ar[0] = ts.pollFirst();
  					int c = 0;
  					for (int i = 1; i < n; i += 2) {
  						c++;
  						if (ts.isEmpty()) {
  							out.println(-1);
  							continue all;
  						}
  						ar[i] = ts.pollLast();
  						if (ts.isEmpty()) {
  							out.println(-1);
  							continue all;
  						}
  						ar[i + 1] = ts.pollFirst();
  						if (i + 1 == n - 1) {
  							out.println(-1);
  							continue all;
  						}
  						if (c == b) {
  							i += 2;
  							while (!ts.isEmpty()) {
  								ar[i] = ts.pollLast();
  								i++;
  							}
  							break;
  						}
  					}
  					if (c < b) {
  						out.println(-1);
  						continue;
  					}
  				}
  			} else if (b > a) {
  				if (b == 1) {
  					ar[0] = ts.pollLast();
  					int i = 1;
  					while (i < n) {
  						ar[i] = ts.pollFirst();
  						i++;
  					}
  				} else {
  					ar[0] = ts.pollLast();
  					int c = 0;
  					for (int i = 1; i < n; i += 2) {
  						c++;
  						if (ts.isEmpty()) {
  							out.println(-1);
  							continue all;
  						}
  						ar[i] = ts.pollFirst();
  						if (ts.isEmpty()) {
  							out.println(-1);
  							continue all;
  						}
  						ar[i + 1] = ts.pollLast();
  						if (i + 1 == n - 1) {
  							out.println(-1);
  							continue all;
  						}
  						if (c == a) {
  							i += 2;
  							while (!ts.isEmpty()) {
  								ar[i] = ts.pollFirst();
  								i++;
  							}
  							break;
  						}
  					}
  					if (c < a) {
  						out.println(-1);
  						continue;
  					}
  				}
  			} else {
  				throw new Exception();
  			}
  			for (int i = 0; i < n; i++)
  				out.print(ar[i] + " ");
  			out.println();
  		}
  		out.flush();
  	}
  
  	static class Scanner {
  		StringTokenizer st;
  		BufferedReader br;
  
  		public Scanner(InputStream system) {
  			br = new BufferedReader(new InputStreamReader(system));
  		}
  
  		public Scanner(String file) throws Exception {
  			br = new BufferedReader(new FileReader(file));
  		}
  
  		public String next() throws IOException {
  			while (st == null || !st.hasMoreTokens())
  				st = new StringTokenizer(br.readLine());
  			return st.nextToken();
  		}
  
  		public String nextLine() throws IOException {
  			return br.readLine();
  		}
  
  		public int nextInt() throws IOException {
  			return Integer.parseInt(next());
  		}
  
  		public double nextDouble() throws IOException {
  			return Double.parseDouble(next());
  		}
  
  		public char nextChar() throws IOException {
  			return next().charAt(0);
  		}
  
  		public Long nextLong() throws IOException {
  			return Long.parseLong(next());
  		}
  
  		public int[] nextArrInt(int n) throws IOException {
  			int[] a = new int[n];
  			for (int i = 0; i < n; i++)
  				a[i] = nextInt();
  			return a;
  		}
  
  		public long[] nextArrLong(int n) throws IOException {
  			long[] a = new long[n];
  			for (int i = 0; i < n; i++)
  				a[i] = nextLong();
  			return a;
  		}
  
  		public int[] nextArrIntSorted(int n) throws IOException {
  			int[] a = new int[n];
  			Integer[] a1 = new Integer[n];
  			for (int i = 0; i < n; i++)
  				a1[i] = nextInt();
  			Arrays.sort(a1);
  			for (int i = 0; i < n; i++)
  				a[i] = a1[i].intValue();
  			return a;
  		}
  
  		public long[] nextArrLongSorted(int n) throws IOException {
  			long[] a = new long[n];
  			Long[] a1 = new Long[n];
  			for (int i = 0; i < n; i++)
  				a1[i] = nextLong();
  			Arrays.sort(a1);
  			for (int i = 0; i < n; i++)
  				a[i] = a1[i].longValue();
  			return a;
  		}
  
  		public boolean ready() throws IOException {
  			return br.ready();
  		}
  
  		public void waitForInput() throws InterruptedException {
  			Thread.sleep(3000);
  		}
  	}
  }