#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)
{
if(in[n]*10 + in[n+1] <= 26)
dp[n] = max(dp[n+2] * 2, dp[n+1] + dp[n+2]);
else dp[n] = max(dp[n+2], dp[n+1]);
}
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, t, 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+KGIpOy0taSkKI2RlZmluZSBwYiBwdXNoX2JhY2sKdXNpbmcgbmFtZXNwYWNlOjpzdGQ7Cgp0eXBlZGVmIHZlY3RvciA8aW50PiB2aTsKdmVjdG9yPGxsdT4gZHA7CnZpIGluOwp2b2lkIGYoaW50IG4pCnsKICAgIGlmKGluW25dKjEwICsgaW5bbisxXSA8PSAyNikKICAgICAgICBkcFtuXSA9IG1heChkcFtuKzJdICogMiwgZHBbbisxXSArIGRwW24rMl0pOwogICAgZWxzZSAgIGRwW25dID0gbWF4KGRwW24rMl0sIGRwW24rMV0pOwp9CnZvaWQgc2V0X2RwKHN0cmluZyBzLCB2ZWN0b3I8bGx1PiAmZHAsIGludCBsZW4pCnsKZHAgPSB2ZWN0b3I8bGx1PihsZW4rMSwgMCk7CmRwW2xlbl0gPSAwOwpkcFtsZW4tMV0gPSAxOwppZigxMCoocy5hdChsZW4tMikgLScwJykgKyBzLmF0KGxlbi0xKSAtICcwJyA8PSAyNikgICAgZHBbbGVuLTJdID0gMjsKZWxzZSBkcFtsZW4tMl0gPSAxOwp9CmludCBtYWluKCkKewovLyAgIGZyZW9wZW4oImluLnR4dCIsICJyIiwgc3RkaW4pOwogICAgaW50IGksIHQsIGxlbiwgZmxhZyA9IDE7CgogICAgc3RyaW5nIHM7CiAgIGNpbj4+czsKICAgICAgICB3aGlsZShmbGFnIHx8IHMuYXQoMCkgIT0gNDgpCiAgICAgICAgewogICAgICAgICAgICBmbGFnID0gMDsKICAgICAgICAgICAgbGVuID0gMDsKICAgICAgICBmb3Ioc3RyaW5nOjppdGVyYXRvciBpdD1zLmJlZ2luKCk7IGl0IT1zLmVuZCgpOyArK2l0KQogICAgICAgIGxlbiArKzsKCnNldF9kcChzLCBkcCwgbGVuKTsKCmluID0gdmkobGVuKzEsIDApOwogICAgICAgIGZpKGksIDAsIGxlbikKICAgICAgICBpbltpXSA9IHMuYXQoaSkgLSAnMCc7CgogICAgZmQoaSwgbGVuLTMsIC0xKQogICAgZihpKTsKCiAgICBjb3V0PDxkcFswXTsKY291dDw8ZW5kbDsKY2luPj5zOwogICAgfQogICAgcmV0dXJuIDA7CiAgICB9Cg==