#include #define MOD 330301441 #define MAX 100005 #define ll long long #define slld(t) scanf("%lld",&t) #define sd(t) scanf("%d",&t) #define ss(x) scanf("%s",x) #define pd(t) printf("%d\n",t) #define plld(t) printf("%lld\n",t) #define pii pair #define pll pair #define tr(container,it) for(typeof(container.begin()) it=container.begin();it!=container.end();it++) #define mp(a,b) make_pair(a,b) #define FF first #define SS second #define pb(x) push_back(x) #define vi vector #define vpii vector #define vll vector #define clr(x) memset(x,0,sizeof(x)) #define FILEIO(name) \ freopen(name".in", "r", stdin); \ freopen(name".out", "w", stdout); using namespace std; ll power(ll a,ll b,ll m){ if(!a) return b?0:1; ll x=1; a%=m; while(b){ if((1&b)) x = x * a % m; a = a * a % m; b >>= 1; } return x; } // Multidimensional dft computation ll poly[1<<21]; // will be used to store multivariate polynomial int k[22]; ll w[]={0,1,330301440,237065193,290591153,322558105,237065194,273067711,239383794,256120685,168367411}; ll pw[101], eval[11]; void DFT(int dimensions,int K,bool invert=0){ pw[0]=1; pw[1]=invert?power(w[K],MOD-2,MOD):w[K]; for(int i=2;i<=K*K;i++) pw[i]=pw[i-1]*pw[1]%MOD; // O(dimensions*K^(dimensions-1)*K^2) for(int i=1;i<=dimensions;i++){ int left=k[i-1]; int right=k[dimensions-i]; for(int m=0;m=MOD) eval[pwers]%=MOD; } } for(int j=0;j=LIM) break; } k[0]=1; for(int i=1;i<=dimensions;i++) k[i]=k[i-1]*K; DFT(dimensions,K); for(int i=0;i