Rt
#include<bits/stdc++.h>
#define int long long
using namespace std;
//char buf[1<<18],*p1=buf,*p2=buf;
//#define getchar() (p1==p2&&(p1=buf,p2=p1+fread(buf,1,1<<18,stdin),p1==p2)?EOF:*p1++)
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
inline void write(int x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9) write(x/10);
putchar(x%10+'0');
}
int ans[100001];
set<int>setq,setq2;
signed main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
int T=read();
while(T--){
int n=read(),a=read(),b=read();
if(!a&&!b){
for(int i=1;i<=n;i++) write(i),putchar(' ');
puts("");
continue;
}
int ss=(1+n)*n/2,ss2=(1+n/2)*(n/2)/2;
if(a+b>ss||max(a,b)>ss-ss2){
puts("-1");
continue;
}
setq2.clear();
for(int i=1;i<=n;i++) setq.insert(i);
int sum=0;
for(int i=1;i<=n/2;i++){
int resss=0,ttt=n;
for(int j=n/2;j>=i;j--) resss+=ttt,ttt--;
if(min(a,b)-sum>resss){
int pt=n,summ=0;
for(int j=n/2;j>=i;j--) ans[j]=pt,pt--;
ans[i-1]=0;
for(int j=1;j<=n/2;j++) summ+=ans[j];
ans[i-1]=min(a,b)-summ;
int xx=ans[i-1];
while(setq2.count(xx)) xx++;
ans[i-1]=xx;
break;
}
if(i==n/2){
int yy=min(a,b)-sum;
if(yy<=0) goto st;
while(setq2.count(yy)) yy++;
ans[i]=yy;
break;
}
st:
ans[i]=i;
setq2.insert(i);
sum+=i;
}
int res1=0,res2=0;
for(int i=1;i<=n/2;i++) setq.erase(ans[i]),res1+=ans[i];
for(int i=n/2+1;i<=n;i++){
int x=*setq.begin();
setq.erase(x);
ans[i]=x;
res2+=x;
}
if((a<=b&&(res1<a||res2<b))||(a>b&&(res2<a||res1<b))){
puts("-1");
continue;
}
if(a<b) for(int i=1;i<=n;i++) write(ans[i]),putchar(' ');
else for(int i=n;i>=1;i--) write(ans[i]),putchar(' ');
puts("");
}
return 0;
}
/*
20 100 100
1 2 3 4
1 3 6 10
99 97 94 90
*/
个人感觉每行代码都是在拆东墙补西墙,但是A了