#include<bits/stdc++.h>
using namespace std;
struct data{
long long f,g,h;
};
const int mod=998244353;
data euclid(long long a,long long b,long long c,long long n){
data ans;
if(a==0){
ans.f=(b/c)*(n+1)%mod;
ans.g=(n+1)*(b/c)%mod*(b/c)%mod;
ans.h=n*(n+1)/2%mod*(b/c)%mod;
}else if(a>=c||b>=c){
data p=euclid(a%c,b%c,c,n);
ans.f=(n*(n+1)/2%mod*(a/c)%mod+(n+1)%mod*(b/c)%mod+p.f)%mod;
ans.g=(p.g+2*(a/c)%mod*p.h%mod+2*(b/c)%mod*p.f%mod+(__int128)n*(n+1)*(2*n+1)/6%mod*(a/c)%mod*(a/c)%mod+n*(n+1)/2%mod*(a/c)%mod*(b/c)%mod+(n+1)*(b/c)%mod*(b/c)%mod)%mod;
ans.h=(p.h+(__int128)n*(n+1)*(2*n+1)/6%mod*(a/c)%mod+n*(n+1)/2%mod*(b/c)%mod)%mod;
}else{
long long m=(a*n+b)/c;
data p=euclid(c,c-b-1,a,m-1);
ans.f=((n*(m%mod)%mod-p.f)%mod+mod)%mod;
ans.g=(((n*m%mod*(m+1)%mod-ans.f)%mod-2*p.h%mod-2*p.f%mod)%mod+mod)%mod;
ans.h=(((__int128)m*n*(n+1)-p.g-p.f)/2%mod+mod%mod)%mod;
}
return ans;
}
int main(){
int t;
cin>>t;
while(t--){
long long a,b,c,n;
cin>>n>>a>>b>>c;
data ans=euclid(a,b,c,n);
cout<<ans.f<<" "<<ans.g<<" "<<ans.h<<endl;
}
}