Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod=1e9+7;char s[105],*sum;int dis[105][2],num,i,len;ll f[105][505],dp[55][55][505];void init(){dp[0][0][0]=1;for(int i=0;i<55;i++)for(int j=0;j<55;j++)for(int k=0;k<505;k++){if(i)for(int ii=0;ii<10&&k>=ii;ii++)dp[i][j][k]+=dp[i-1][j][k-ii];if(j)for(int ii=1;ii<10&&k>=ii;ii++)dp[i][j][k]+=dp[i][j-1][k-ii];if(i&&j)for(int ii=1;ii<19&&k>=ii;ii++)dp[i][j][k]-=dp[i-1][j-1][k-ii]*min(ii,19-ii);dp[i][j][k]=(dp[i][j][k]%mod+mod)%mod;}}ll dfs(int now,int last){if(now==len)return last==0&&(!(dis[now][0]||dis[now][1]));if(f[now][last]!=-1)