#include #include #include using namespace atcoder; using mint = modint998244353; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000001 map get(long long n){ map ret; for(long long i=2;i*i<=n;i++){ while(n%i==0){ ret[i]++; n/=i; } } if(n!=1)ret[n]++; return ret; } void Out(vector> A){ rep(i,A.size())sort(A[i].begin(),A[i].end()); sort(A.begin(),A.end()); A.erase(unique(A.begin(),A.end()),A.end()); cout< &Y,vector> &Ps,int pos,long long cur){ //cout<>S>>T; vector> ans; map s = get(S); for(auto &a:s){ a.second *= 2; } s[2] += 4; { auto t = get(T); for(auto a:t){ if(s[a.first]> Ps; for(auto a:s){ if(a.second>0){ Ps.emplace_back(a.first,a.second); } rep(j,a.second)S *= a.first; } vector Y; dfs(Y,Ps,0,1LL); { int tt = Y.size(); rep(i,tt){ Y.push_back(Y[i]*-1); } } sort(Y.begin(),Y.end()); rep(i,Y.size()){ for(int j=i;j=T)continue; array A = {T-Y[i],T-Y[j],T-x}; sort(A.begin(),A.end()); if(A[0]<=0)continue; if(A[2]>1000000000)continue; if(A[0]&A[1]&A[2]&1)continue; A[0]/=2; A[1]/=2; A[2]/=2; if(A[0]+A[1]+A[2]!=T)continue; if(A[2]>=A[1]+A[0])continue; ans.push_back(A); } } Out(ans); } int main(){ int _t; cin>>_t; rep(_,_t){ solve(); } return 0; }