#include<iostream>
using namespace std;
int length(string a) {
int i=0;
while(a[i])
i++;
return i;
}
int numberPossibilites(string input, int dp[],int index){
int ans = 0, ansNext=0;
if(input[index] == '\0') {
dp[index]=1;
return 1;
} else {
if(!dp[index]){
if(input[index+1] != '\0'){
if(input[index] > '0' && input[index] < '3' && input[index+1] < '7'){
if(!dp[index+2]){
ans = numberPossibilites(input, dp, index+2);
} else {
ans = dp[index+2];
}
}
}
if(input[index] != '0'){
if(!dp[index+1]){
ansNext = numberPossibilites(input, dp, index+1);
ans += ansNext;
} else {
ans += dp[index+1];
}
}
dp[index] = ans;
}
}
return dp[index];
}
int main() {
string input;
while(true){
cin >> input;
if(input[0] == '0' && input[1] == '\0')
break;
int len = length(input);
int *dp = new int[len+1]();
cout << numberPossibilites(input, dp, 0) << "\n";
}
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbGVuZ3RoKHN0cmluZyBhKSB7CiAgICBpbnQgaT0wOwogICAgd2hpbGUoYVtpXSkKICAgICAgICBpKys7CiAgICByZXR1cm4gaTsKfQoKaW50IG51bWJlclBvc3NpYmlsaXRlcyhzdHJpbmcgaW5wdXQsIGludCBkcFtdLGludCBpbmRleCl7CiAgICBpbnQgYW5zID0gMCwgYW5zTmV4dD0wOwogICAgCiAgICBpZihpbnB1dFtpbmRleF0gPT0gJ1wwJykgewogICAgICAgIGRwW2luZGV4XT0xOwogICAgICAgIHJldHVybiAxOwogICAgfSBlbHNlIHsKICAgICAgICBpZighZHBbaW5kZXhdKXsKICAgICAgICAgICAgaWYoaW5wdXRbaW5kZXgrMV0gIT0gJ1wwJyl7CiAgICAgICAgICAgICAgICBpZihpbnB1dFtpbmRleF0gPiAnMCcgJiYgaW5wdXRbaW5kZXhdIDwgJzMnICYmIGlucHV0W2luZGV4KzFdIDwgJzcnKXsKICAgICAgICAgICAgICAgICAgICBpZighZHBbaW5kZXgrMl0pewogICAgICAgICAgICAgICAgICAgICAgICBhbnMgPSBudW1iZXJQb3NzaWJpbGl0ZXMoaW5wdXQsIGRwLCBpbmRleCsyKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBhbnMgPSBkcFtpbmRleCsyXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoaW5wdXRbaW5kZXhdICE9ICcwJyl7CiAgICAgICAgICAgICAgICBpZighZHBbaW5kZXgrMV0pewogICAgICAgICAgICAgICAgICAgIGFuc05leHQgPSBudW1iZXJQb3NzaWJpbGl0ZXMoaW5wdXQsIGRwLCBpbmRleCsxKTsKICAgICAgICAgICAgICAgICAgICBhbnMgKz0gYW5zTmV4dDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYW5zICs9IGRwW2luZGV4KzFdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGRwW2luZGV4XSA9IGFuczsKICAgICAgICB9CiAgICAgICAKICAgIH0KICAgIHJldHVybiBkcFtpbmRleF07Cn0KCmludCBtYWluKCkgewogICAgc3RyaW5nIGlucHV0OwogICAgd2hpbGUodHJ1ZSl7CiAgICAgICAgY2luID4+IGlucHV0OwogICAgICAgIGlmKGlucHV0WzBdID09ICcwJyAmJiBpbnB1dFsxXSA9PSAnXDAnKQogICAgICAgICAgICBicmVhazsKICAgICAgICBpbnQgbGVuID0gbGVuZ3RoKGlucHV0KTsKICAgICAgICAKICAgICAgICBpbnQgKmRwID0gbmV3IGludFtsZW4rMV0oKTsKICAgICAgICAKICAgICAgICBjb3V0IDw8IG51bWJlclBvc3NpYmlsaXRlcyhpbnB1dCwgZHAsIDApIDw8ICJcbiI7CiAgICB9Cn0=