#include <bits/stdc++.h>
using namespace std;
long long ncr(int n,int r)
{ long long result=1,temp=1;
for(int i=1;i<=n;i++)
temp*=i;
result*=temp;temp=1;
for(int i=1;i<=r;i++)
temp*=i;
result/=temp;
temp=1;
for(int i=1;i<=n-r;i++)
temp*=i;
result/=temp;
return result;
}
long long func(long long contino)
{ int i=1;long long res;
while(contino-i>=i){
res +=ncr(contino-i,i);
i++;}
return res;
}
int main() {
std::ios::sync_with_stdio(false);
string s;
long long continous,result,temp,mark,x;
cin>>s;
while((s.length()!=1)&&s[0]!='0'){
result=1;continous=1;result=1;temp=1;mark=0;
for(int i=0;i<s.length()-1;i++)
{if((s[i]=='1')||((s[i]=='2')&& s[i+1]<103))
{ continous++;
mark=1;
}
else{
if(mark==1)
{x = func(continous);
temp=temp*x;
cout<<"debug";
continous=1;mark=0;
}
}
}
if(mark==1)
{x = func(continous);
temp=temp*x;
cout<<"debug"<<temp;
continous=1;mark=0;
}
cin>>s;
}
// your code goes here
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpsb25nIGxvbmcgbmNyKGludCBuLGludCByKQp7IGxvbmcgbG9uZyByZXN1bHQ9MSx0ZW1wPTE7CmZvcihpbnQgaT0xO2k8PW47aSsrKQp0ZW1wKj1pOwpyZXN1bHQqPXRlbXA7dGVtcD0xOwpmb3IoaW50IGk9MTtpPD1yO2krKykKdGVtcCo9aTsKcmVzdWx0Lz10ZW1wOwp0ZW1wPTE7CmZvcihpbnQgaT0xO2k8PW4tcjtpKyspCnRlbXAqPWk7CnJlc3VsdC89dGVtcDsKCQoJcmV0dXJuIHJlc3VsdDsKCQoJfQoKbG9uZyBsb25nIGZ1bmMobG9uZyBsb25nIGNvbnRpbm8pCnsgaW50IGk9MTtsb25nIGxvbmcgcmVzOwoJd2hpbGUoY29udGluby1pPj1pKXsKCQkJcmVzICs9bmNyKGNvbnRpbm8taSxpKTsKCWkrKzt9CglyZXR1cm4gcmVzOwoJfQoKaW50IG1haW4oKSB7CglzdGQ6Omlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKCXN0cmluZyBzOwoJbG9uZyBsb25nIGNvbnRpbm91cyxyZXN1bHQsdGVtcCxtYXJrLHg7CgljaW4+PnM7CndoaWxlKChzLmxlbmd0aCgpIT0xKSYmc1swXSE9JzAnKXsKCXJlc3VsdD0xO2NvbnRpbm91cz0xO3Jlc3VsdD0xO3RlbXA9MTttYXJrPTA7Cglmb3IoaW50IGk9MDtpPHMubGVuZ3RoKCktMTtpKyspCgl7aWYoKHNbaV09PScxJyl8fCgoc1tpXT09JzInKSYmIHNbaSsxXTwxMDMpKQoJewljb250aW5vdXMrKzsKCW1hcms9MTsKCQoJfQoJZWxzZXsKCQlpZihtYXJrPT0xKQoJCXt4ID0gZnVuYyhjb250aW5vdXMpOwoJCXRlbXA9dGVtcCp4OwoJCQljb3V0PDwiZGVidWciOwoKCQljb250aW5vdXM9MTttYXJrPTA7CgkJCQoJCX0KCQkKCX0KCQoJCgl9CgkJaWYobWFyaz09MSkKCQl7eCA9IGZ1bmMoY29udGlub3VzKTsKCQl0ZW1wPXRlbXAqeDsKCQkJY291dDw8ImRlYnVnIjw8dGVtcDsKCgkJY29udGlub3VzPTE7bWFyaz0wOwoJCX0KCWNpbj4+czsKfQkKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCXJldHVybiAwOwp9