怀疑是有什么特殊性质(
https://www.luogu.com.cn/record/51988672
#include<bits/stdc++.h>
#define ll long long
using namespace std;
long long read(){
//读入非负数
char c;long long w=0;do c=getchar();while(c>'9'||c<'0');
do w=w*10+c-'0',c=getchar();while(c>='0'&&c<='9');return w;
}
const int maxn=500010;
long long i,j,k,n,m,mod;
int num[maxn],g[maxn][70],sum[maxn][70],x;
long long a[maxn]={1},jc[11],ny[11],s[maxn],POW[maxn];
long long ans=0;
long long ksm(long long sum,long long num){
long long ans=1;
while(num){
if(num&1)ans=ans*sum%mod;
sum=sum*sum%mod;
num>>=1;
}return ans;
}
int W[15][15];
inline int C(int a,int b){
if(W[a][b])return W[a][b];
return W[a][b]=jc[a]*ny[b]*ny[a-b]%mod;
}
signed main(){
cin>>n>>mod;
int N=63;
jc[0]=1;for(i=1;i<mod;i++)jc[i]=jc[i-1]*i%mod;
for(i=0;i<mod;i++)ny[i]=ksm(jc[i],mod-2);
POW[0]=1;
for(i=1;i<maxn;i++){
if(N==63 && 1e18/mod<=POW[i-1]+5)N=i;
POW[i]=POW[i-1]*mod;
}
for(i=1;i<=n;i++)a[i]=read();
for(i=1;i<=n;i++){
if(a[i]+a[x]==0)s[x]++;
else{
a[++x]=a[i];
s[x]=1;
}
}
for(i=1;i<=x;i++){
long long u=a[i];
for(j=0;j<=N;j++){
g[i][j]=u%mod;
u/=mod;
sum[i][j]=sum[i-1][j]+g[i][j];
}
}
long long t=0;
for(i=1;i<=x;i++){
// cout<<"i="<<i<<' '<<s[i]<<endl;
t+=s[i];
long long lastans=1;
if(!a[i]){
ans+=s[i]*(s[i]+1)/2;
continue;
}
for(j=0;j<=N;j++)num[j]=0;
for(j=i;j<=x;j++){
// cout<<"j="<<j<<' '<<a[j]<<' '<<ans<<endl;
if(!a[j]){
ans+=1ll*lastans*t*s[j];
continue;
}
for(k=0;k<=N;k++){
num[k]+=g[j][k];
// cout<<"num["<<k<<"]="<<num[k]<<endl;
if(g[j][k])lastans=lastans*C(sum[j][k]-sum[i-1][k],sum[j-1][k]-sum[i-1][k])%mod;
if(num[k]>=mod)break;
}
if(!lastans)break;
// cout<<"lastans="<<lastans<<" t="<<t<<endl;
ans+=1ll*lastans*t;
}t=0;
}cout<<ans<<endl;
}