题解

可以证明该三元组满***换律和结合律,同时单位元为(1,0,0),满足快速幂,但是幂次可以达到存不下,使用JAVA或者PYTHON大数也显然会T,然后选择将幂次对进行取模(别问我为什么,我也不知道),然后就好做了。
###代码

#include <bits/stdc++.h>
using namespace std;
#define paii pair<int,int>
#define fr first
#define sc second
typedef long long ll;
const int N=2e5+5;
const int p=998244353;
ll e[25][N];
__int128 pre[405];
__int128 mo=1ll*p*p-1;
struct node
{
    ll x,y,z;
    node operator *(const node &a)const{
        return {(x*a.x+y*a.z+z*a.y)%p,(y*a.x+z*a.z+x*a.y)%p,(z*a.x+x*a.z+y*a.y)%p};
    }
}v[N];
node qpow(node a,ll n)
{
    node res;
    res.x=1;
    res.y=0;
    res.z=0;
    while(n){
        if(n&1)res=res*a;
        a=a*a;
        n>>=1;
    }
    return res;
}
void work()
{   
    pre[0]=1;
    for(int i=1;i<=400;i++){
        pre[i]=pre[i-1]*2%mo;
    }
    int n,m,q,z0,a,b;
    scanf("%d%d%d%d%d%d",&n,&m,&q,&z0,&a,&b);
    ll z=z0;
    for(int i=1;i<=n;i++){
        z=(z*a+b)%pre[32];
        v[i].x=z%p;
        z=(z*a+b)%pre[32];
        v[i].y=z%p;
        z=(z*a+b)%pre[32];
        v[i].z=z%p;
    }
    for(int k=1;k<=q;k++){
        for(int i=1;i<=n;i++){
            e[k][i]=0;
            for(int j=0;j<m;j++){
                z=(z*a+b)%pre[32];
                __int128 tmp=z;
                tmp=tmp*pre[32*j]%mo;
                e[k][i]=(e[k][i]+tmp)%mo;
            }
        }
    }
    for(int i=1;i<=q;i++){
        node res;
        res.x=1;
        res.y=0;
        res.z=0;
        for(int j=1;j<=n;j++){
            res=res*qpow(v[j],e[i][j]);
        }
        printf("%lld %lld %lld\n",res.x,res.y,res.z);
    }
}
int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int T=1;
    //scanf("%d",&T);
    //cin>>T;
    while(T--){ 
        work();
    }
}