DP:
#include "stdio.h"
#include "string.h"
__int64 dp[100010],a[100010];
char str[100010];
int main()
{
int n,i;
while (gets(str))
{
if (str[0]=='0') break;
n=strlen(str);
for (i=1;i<=n;i++)
a[i]=str[i-1]-'0';
memset(dp,0,sizeof(dp));
dp[n+1]=1;
for (i=n;i>=1;i--)
{
if (a[i]==0) continue;
dp[i]=dp[i+1];
if (a[i]*10+a[i+1]<=26)
dp[i]+=dp[i+2];
}
printf("%I64d\n",dp[1]);
}
return 0;
}
#include "stdio.h"
#include "string.h"
__int64 dp[20010],a[20010];
char str[20010];
int n;
__int64 dfs(int x)
{
if (dp[x]) return dp[x];
if (x>=n) {dp[x]=1; return 1;}
if (a[x]==0) {dp[x]=0; return 0;}
if (a[x+1]!=0) dp[x]+=dfs(x+1);
if (a[x]*10+a[x+1]<=26 && a[x]!=0) dp[x]+=dfs(x+2);
return dp[x];
}
int main()
{
int i;
while (gets(str))
{
if (str[0]=='0') break;
n=strlen(str);
for (i=1;i<=n;i++)
a[i]=str[i-1]-'0';
a[i]=99999;
memset(dp,0,sizeof(dp));
printf("%I64d\n",dfs(1));
}
return 0;
}