#include<bits/stdc++.h>
#include<fstream>
#define llu long long unsigned
#define fi(i,a,b) for(int i=(a);i<(b);i++)
#define fd(i,a,b) for(int i=(a);i>(b);--i)
#define pb push_back
using namespace::std;
typedef vector <int> vi;
vector<llu> dp;
vi in;
void f(int n)
{
dp[n] = dp[n+1];
if(in[n]*10 + in[n+1] <= 26)
dp[n] += dp[n+2];
}
void set_dp(string s, vector<llu> &dp, int len)
{
dp = vector<llu>(len+1, 0);
dp[len] = 0;
dp[len-1] = 1;
if(10*(s.at(len-2) -'0') + s.at(len-1) - '0' <= 26) dp[len-2] = 2;
else dp[len-2] = 1;
}
int main()
{
// freopen("in.txt", "r", stdin);
int i, len, flag = 1;
string s;
cin>>s;
while(flag || s.at(0) != 48)
{
flag = 0;
len = 0;
for(string::iterator it = s.begin(); it != s.end(); ++it)
len ++;
set_dp(s, dp, len);
in = vi(len+1, 0);
fi(i, 0, len)
in[i] = s.at(i) - '0';
fd(i, len-3, -1)
f(i);
cout<<dp[0];
cout<<endl;
cin>>s;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGU8ZnN0cmVhbT4KI2RlZmluZSBsbHUgbG9uZyBsb25nIHVuc2lnbmVkCiNkZWZpbmUgZmkoaSxhLGIpIGZvcihpbnQgaT0oYSk7aTwoYik7aSsrKQojZGVmaW5lIGZkKGksYSxiKSBmb3IoaW50IGk9KGEpO2k+KGIpOy0taSkKI2RlZmluZSBwYiBwdXNoX2JhY2sKCnVzaW5nIG5hbWVzcGFjZTo6c3RkOwoKdHlwZWRlZiB2ZWN0b3IgPGludD4gdmk7CnZlY3RvcjxsbHU+IGRwOwp2aSBpbjsKdm9pZCBmKGludCBuKQp7CiAgICBkcFtuXSA9IGRwW24rMV07CiAgICBpZihpbltuXSoxMCArIGluW24rMV0gPD0gMjYpCiAgICAgICAgZHBbbl0gKz0gZHBbbisyXTsKfQp2b2lkIHNldF9kcChzdHJpbmcgcywgdmVjdG9yPGxsdT4gJmRwLCBpbnQgbGVuKQp7CmRwID0gdmVjdG9yPGxsdT4obGVuKzEsIDApOwpkcFtsZW5dID0gMDsKZHBbbGVuLTFdID0gMTsKaWYoMTAqKHMuYXQobGVuLTIpIC0nMCcpICsgcy5hdChsZW4tMSkgLSAnMCcgPD0gMjYpICAgIGRwW2xlbi0yXSA9IDI7CmVsc2UgZHBbbGVuLTJdID0gMTsKfQppbnQgbWFpbigpCnsKLy8gICBmcmVvcGVuKCJpbi50eHQiLCAiciIsIHN0ZGluKTsKICAgIGludCBpLCBsZW4sIGZsYWcgPSAxOwoKICAgIHN0cmluZyBzOwogICBjaW4+PnM7CiAgICAgICAgd2hpbGUoZmxhZyB8fCBzLmF0KDApICE9IDQ4KQogICAgICAgIHsKICAgICAgICAgICAgZmxhZyA9IDA7CiAgICAgICAgICAgIGxlbiA9IDA7CiAgICAgICAgZm9yKHN0cmluZzo6aXRlcmF0b3IgaXQgPSBzLmJlZ2luKCk7IGl0ICE9IHMuZW5kKCk7ICsraXQpCiAgICAgICAgbGVuICsrOwoKc2V0X2RwKHMsIGRwLCBsZW4pOwoKaW4gPSB2aShsZW4rMSwgMCk7CiAgICAgICAgZmkoaSwgMCwgbGVuKQogICAgICAgIGluW2ldID0gcy5hdChpKSAtICcwJzsKCiAgICBmZChpLCBsZW4tMywgLTEpCiAgICBmKGkpOwoKICAgIGNvdXQ8PGRwWzBdOwpjb3V0PDxlbmRsOwpjaW4+PnM7CiAgICB9CiAgICByZXR1cm4gMDsKICAgIH0K