code:
#include <bits/stdc++.h> #define N 100005 #define mod 100003 #define LL long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; LL fac[N],inv[N],dp[N]; int sta[N],v[N]; LL qpow(LL x,LL y) { LL tmp=1ll; for(;y;y>>=1,x=x*x%mod) if(y&1) tmp=tmp*x%mod; return tmp; } LL Inv(LL x) { return qpow(x,mod-2); } int main() { // setIO("input"); int i,j,n,k,stp=0; scanf("%d%d",&n,&k); fac[0]=inv[0]=1ll; for(i=1;i<=n;++i) fac[i]=fac[i-1]*1ll*i%mod,inv[i]=Inv(fac[i]); for(i=1;i<=n;++i) scanf("%d",&sta[i]); for(i=n;i>=1;--i) { sta[i]^=v[i]; if(sta[i]) { ++stp; for(j=1;j*j<=i;++j) if(i%j==0) { v[j]^=1; if(j!=i/j) v[i/j]^=1; } } } // printf("%d\n",stp); // dp[n]=1; for(i=n;i>=1;--i) dp[i]=(dp[i+1]*1ll*(n-i)%mod+n)%mod*qpow(i,mod-2)%mod; LL ans=0ll; if(stp<=k) ans=stp; else { for(i=stp;i>k;--i) ans=(ans+dp[i])%mod; ans=(ans+k)%mod; } for(i=1;i<=n;++i) ans=ans*1ll*i%mod; printf("%lld\n",ans); return 0; }