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 Practice {
  	static boolean multipleTC = true;
  	FastReader in;
  	PrintWriter out;
  
  	static int mod = (int) (1e9 + 7);
  	int mod2 = 998244353;
  	int parent[];
  	int rank[];
  
  	public static void main(String[] args) throws Exception {
  		new Practice().run();
  	}
  
  	void run() throws Exception {
  		in = new FastReader();
  		out = new PrintWriter(System.out);
  		int T = (multipleTC) ? ni() : 1;
  		pre();
  		for (int t = 1; t <= T; t++)
  			solve(t);
  		out.flush();
  		out.close();
  	}
  
  	void pre() throws Exception {
  	}
  
  	void solve(int TC) throws Exception {
  		int n = ni();
  		int a = ni();
  		int b = ni();
  		if (Math.abs(a - b) > 1 || a > (n - 1) / 2 || b > (n - 1) / 2 || (a + b) > (n - 2)) {
  			pn("-1");
  		} else {
  			if (a == 0 && b == 0) {
  				int per[] = new int[n];
  				for (int i = 1; i <= n; i++) {
  					per[i - 1] = i;
  				}
  				pn(printArr(per));
  			} else if (a == b) {
  				int per[] = buildEqual(n, a, b);
  				pn(printArr(per));
  			}
  
  			else if (a > b) {
  				int per[] = buildBackward(n, a, b);
  				pn(printArr(per));
  			} else {
  				int per[] = buildForward(n, a, b);
  				pn(printArr(per));
  			}
  		}
  
  	}
  
  	private int[] buildBackward(int n, int a, int b) {
  		int per[] = new int[n];
  		for (int i = 1; i <= n; i++) {
  			per[i - 1] = i;
  		}
  		int aCreated = 0;
  		int bCreated = 0;
  		for (int i = n - 1; i >= 1; i -= 2) {
  			swap(per, i, i - 1);
  			aCreated++;
  			bCreated = aCreated - 1;
  			if (aCreated == a && bCreated == b) {
  				return per;
  			}
  		}
  		return per;
  	}
  
  	private int[] buildEqual(int n, int a, int b) {
  		int per[] = new int[n];
  		for (int i = 1; i <= n; i++) {
  			per[i - 1] = i;
  		}
  		int aCreated = 0;
  		int bCreated = 0;
  		for (int i = 0; i < n - 1; i += 2) {
  			swap(per, i, i + 1);
  			bCreated++;
  			aCreated = bCreated - 1;
  			if (bCreated == b) {
  				break;
  			}
  		}
  		swap(per, n - 1, n - 2);
  		return per;
  	}
  
  	private int[] buildForward(int n, int a, int b) {
  		int per[] = new int[n];
  		for (int i = 1; i <= n; i++) {
  			per[i - 1] = i;
  		}
  		int aCreated = 0;
  		int bCreated = 0;
  		for (int i = 0; i < n - 1; i += 2) {
  			swap(per, i, i + 1);
  			bCreated++;
  			aCreated = bCreated - 1;
  			if (aCreated == a && bCreated == b) {
  				return per;
  			}
  		}
  		return per;
  	}
  
  	void union(int u, int v) {
  		u = findParent(u);
  		v = findParent(v);
  		if (rank[u] > rank[v]) {
  			parent[v] = u;
  		} else if (rank[u] < rank[v]) {
  			parent[u] = v;
  		} else {
  			parent[v] = u;
  			rank[u]++;
  		}
  	}
  
  	int findParent(int v) {
  		if (v == parent[v])
  			return v;
  		return parent[v] = findParent(parent[v]);
  	}
  
  	StringBuilder printArr(int arr[]) {
  		StringBuilder sb = new StringBuilder();
  		int n = arr.length;
  		for (int i = 0; i < n; i++) {
  			sb.append(arr[i] + " ");
  		}
  		return sb;
  	}
  
  	StringBuilder printArr(long arr[]) {
  		StringBuilder sb = new StringBuilder();
  		int n = arr.length;
  		for (int i = 0; i < n; i++) {
  			sb.append(arr[i] + " ");
  		}
  		return sb;
  	}
  
  	class pair {
  		int x, y;
  
  		pair(int x, int y) {
  			this.x = x;
  			this.y = y;
  		}
  
  		@Override
  		public String toString() {
  			return " " + x + ", " + y + "]";
  		}
  
  	}
  
  	class pairL {
  		long x, y;
  
  		pairL(long x, long y) {
  			this.x = x;
  			this.y = y;
  		}
  
  		@Override
  		public String toString() {
  			return " " + x + ", " + y + "]";
  		}
  
  	}
  
  	boolean isSorted(int arr[]) {
  		for (int i = 0; i < arr.length - 1; i++) {
  			if (arr[i] > arr[i + 1]) {
  				return false;
  			}
  		}
  		return true;
  	}
  
  	void swap(int arr[], int x, int y) {
  		int t = arr[x];
  		arr[x] = arr[y];
  		arr[y] = t;
  	}
  
  	static int bitCount(int x) {
  		return x == 0 ? 0 : (1 + bitCount(x & (x - 1)));
  	}
  
  	void sort(int arr[]) {
  		ArrayList<Integer> list = new ArrayList<>();
  		for (int i = 0; i < arr.length; i++)
  			list.add(arr[i]);
  		Collections.sort(list);
  		for (int i = 0; i < arr.length; i++)
  			arr[i] = list.get(i);
  	}
  
  	static void dbg(Object... o) {
  		System.err.println(Arrays.deepToString(o));
  	}
  
  	ArrayList<Long> primeFactorization(long n) {
  		ArrayList<Long> factorization = new ArrayList<>();
  		while (n % 2 == 0) {
  			factorization.add(2L);
  			n /= 2;
  		}
  		for (long d = 3; d * d <= n; d += 2) {
  			while (n % d == 0) {
  				factorization.add(d);
  				n /= d;
  			}
  		}
  		if (n > 1)
  			factorization.add(n);
  		return factorization;
  	}
  
  	private ArrayList<Integer> getPrimes(int n) {
  		boolean sieve[] = new boolean[n + 1];
  		sieve[0] = sieve[1] = true;
  		for (int i = 2; i * i <= n; i++) {
  			if (!sieve[i]) {
  				for (int j = i * i; j <= n; j += i) {
  					sieve[j] = true;
  				}
  			}
  		}
  		ArrayList<Integer> primes = new ArrayList<>();
  		for (int i = 2; i <= n; i++) {
  			if (!sieve[i]) {
  				primes.add(i);
  			}
  		}
  		return primes;
  	}
  
  	public static boolean isPrime(long n) {
  		if (n < 2)
  			return false;
  		if (n == 2 || n == 3)
  			return true;
  		if (n % 2 == 0 || n % 3 == 0)
  			return false;
  		long sqrtN = (long) Math.sqrt(n) + 1;
  		for (long i = 6L; i <= sqrtN; i += 6) {
  			if (n % (i - 1) == 0 || n % (i + 1) == 0)
  				return false;
  		}
  		return true;
  	}
  
  	public static long gcd(long a, long b) {
  		if (a > b)
  			a = (a + b) - (b = a);
  		if (a == 0L)
  			return b;
  		return gcd(b % a, a);
  	}
  
  	public long binaryExpo(long base, long exp) {
  		long res = 1;
  		while (exp > 0) {
  			if ((exp & 1) == 1)
  				res = res * base;
  			base = base * base;
  			exp >>= 1;
  		}
  		return res;
  	}
  
  	public long pow(long base, long exp, long MOD) {
  		base %= MOD;
  		long res = 1;
  		while (exp > 0) {
  			if ((exp & 1) == 1)
  				res = res * base % MOD;
  			base = base * base % MOD;
  			exp >>= 1;
  		}
  		return res;
  	}
  
  	public static long totient(long n) {
  		long result = n;
  		for (int p = 2; p * p <= n; ++p)
  			if (n % p == 0) {
  				while (n % p == 0)
  					n /= p;
  				result -= result / p;
  			}
  		if (n > 1)
  			result -= result / n;
  		return result;
  	}
  
  	int bit(long n) {
  		return (n == 0) ? 0 : (1 + bit(n & (n - 1)));
  	}
  
  	public long max(long... arr) {
  		long max = arr[0];
  		for (long itr : arr)
  			max = Math.max(max, itr);
  		return max;
  	}
  
  	public int max(int... arr) {
  		int max = arr[0];
  		for (int itr : arr)
  			max = Math.max(max, itr);
  		return max;
  	}
  
  	public long min(long... arr) {
  		long min = arr[0];
  		for (long itr : arr)
  			min = Math.min(min, itr);
  		return min;
  	}
  
  	public int min(int... arr) {
  		int min = arr[0];
  		for (int itr : arr)
  			min = Math.min(min, itr);
  		return min;
  	}
  
  	public long sum(long... arr) {
  		long sum = 0;
  		for (long itr : arr)
  			sum += itr;
  		return sum;
  	}
  
  	public long sum(int... arr) {
  		long sum = 0;
  		for (int itr : arr)
  			sum += itr;
  		return sum;
  	}
  
  	void p(Object o) {
  		out.print(o);
  	}
  
  	void pn(Object o) {
  		out.println(o);
  	}
  
  	void pni(Object o) {
  		out.println(o);
  		out.flush();
  	}
  
  	String n() throws Exception {
  		return in.next();
  	}
  
  	String nln() throws Exception {
  		return in.nextLine();
  	}
  
  	int ni() throws Exception {
  		return Integer.parseInt(in.next());
  	}
  
  	long nl() throws Exception {
  		return Long.parseLong(in.next());
  	}
  
  	long[] readArr(int n) throws Exception {
  		long arr[] = new long[n];
  		for (int i = 0; i < n; i++) {
  			arr[i] = nl();
  		}
  		return arr;
  	}
  
  	double nd() throws Exception {
  		return Double.parseDouble(in.next());
  	}
  
  	class FastReader {
  		BufferedReader br;
  		StringTokenizer st;
  
  		public FastReader() {
  			br = new BufferedReader(new InputStreamReader(System.in));
  		}
  
  		public FastReader(String s) throws Exception {
  			br = new BufferedReader(new FileReader(s));
  		}
  
  		String next() throws Exception {
  			while (st == null || !st.hasMoreElements()) {
  				try {
  					st = new StringTokenizer(br.readLine());
  				} catch (IOException e) {
  					throw new Exception(e.toString());
  				}
  			}
  			return st.nextToken();
  		}
  
  		String nextLine() throws Exception {
  			String str = "";
  			try {
  				str = br.readLine();
  			} catch (IOException e) {
  				throw new Exception(e.toString());
  			}
  			return str;
  		}
  	}
  }