思路:对于给定的n,s(i)即将n分解为i个数的组合数,也就是在n-1个位置插入i-1个板即C(n-1,i-1);
∑S=2^(n-1);
phi(1000000007)=1000000006;
对于n>=phi,有a^n%c=a^(n%phi(c)+phi(c))%c。
代码如下:
#include<cstdio>
#include<cstring>
#define ll __int64
#define mod 1000000007
#define phi 1000000006
char s[];
ll pow(ll a,ll b)
{
ll ans=;
while(b){
if(b&) ans=ans*a%mod;
b>>=;
a=a*a%mod;
}
return ans;
}
int main()
{
int len,i;
ll a,b;
while(scanf("%s",s)!=EOF){
len=strlen(s);
a=b=;
for(i=;i<len;i++){
a=a*+s[i]-'';
if(b==&&a>=phi) b=phi;
a%=phi;
}
printf("%I64d\n",pow(,(a+b-)%phi));
}
return ;
}