SPOJ PROBLEM APLHACODE

#include <bits/stdc++.h>
using namespace std;
#define SPEED ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(0)
#define ll long long int
#define minfun(a,b) ((a)<(b)?(a):(b))
#define maxfun(a,b) ((a)>(b)?(a):(b))

ll dp[5005];
ll solve(string s,int n,int i)
{
if(i<=0) return 1;
if(dp[i]!=-1) return dp[i];
string b="";
b.push_back(s[i-1]);
b.push_back(s[i]);
int num=stoi(b);
if(num>10&&num<=26)
{
return dp[i]=solve(s,n,i-1)+solve(s,n,i-2);
}
else return dp[i]=solve(s,n,i-1);
}
int main()
{
SPEED;
string s;
while(cin>>s)
{
memset(dp,-1,sizeof(dp));
if(s[0]==ā€˜0ā€™) return 0;
cout<<solve(s,s.length(),s.length()-1)<<ā€™\nā€™;
}
}