/*
Migrated from Lutece 759 倒推数组
Description
我们给出一个奇怪的公式:
f(a)=∑(i=1,n)∑(j=1,n)min(a_i,a_j)其中min(x,y) 表示x,y中的较小值。如果你对求和符号不太熟悉,我们也可以写成程序语言的形式:
int f = 0;
for (int i = 1; i <= n; ++i)
for ( int j = 1; j <= n ; ++j)
f = f + min (a[i], a[j]);
注意到这里a是一个数组,下标从1到n,我们要求
a数组满足以下条件:a中所有元素都是正整数。a中所有元素互不相同。
给定n和f(a)的值,请构造出合法的a数组,如果有多个a数组满足条件,输出字典序最小的答案。关于字典序的进一步说明请看Hint。
如果满足条件的数组不存在,输出−1。
Input
第一行是一个数T(T≤100),表示测试数据的组数。
每组测试数据包括一行,两个数n和F,代表数列元素个数以及f(a)的值。(1≤n≤100,1≤F≤10^9)
Output
对于每一组测试数据,输出一行。
如果有解,输出n个数,数之间用空格隔开,否则输出−1.行末不允许有多余的空格,最后一个元素(如果有解)后面没有空格。
*/
/*
这样的数组a,f(a)最小的情况是[1,2,...,n]
此时f(a) = 1*(n+n-1)+2*(n-1 + n-2)+...+n*(1+0)
乘数[2n-1,2n-3,...,3,1]
f(a) = (1,2,...,n)*(2n-1,2n-3,...,3,1)T
=sum(i*(2n-(2i-1))),i=1,..,n) = sum((2n+1)i - 2i^2),i=1,..,n
=n(2n+1)(n+1)/2 - 2n(n+1)(2n+1)/6
i的前n项和为: n(n+1)/2
i^2的前n项和为: n(n+1)(2n+1)/6
f(a) = n(n+1)(2n+1)/6
*/
#include <iostream>
void solve(){
int length,value;std::cin>>length>>value;
int minValue = length*(length+1)*(2*length+1)/6;
if(value<minValue){
std::cout<<-1<<std::endl;
return;
}
for(int i = 1;i<length;++i){
std::cout<<i<<" ";
}
std::cout<<value-minValue+length<<std::endl;
}
int main(){
int T;std::cin>>T;
while(T--){
solve();
}
}