#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
int countDecodingDP(char *digits, int n)
{
int NoOfWays[n+1];
NoOfWays[0]=1;
NoOfWays[1]=1;
for (int i = 1; i <= n; i++)
{
int q=digits[i]-48;
int p=digits[i-1]-48;
//to convert to digit
if (q <= 26 && q > 0) NoOfWays[ i+1 ] = NoOfWays[ i ];
if ((q + p*10) <= 26 && (q + p*10)>0 ) NoOfWays[ i+1 ] += NoOfWays[ i - 1 ];
cout << p <<"--"<< q <<"--"<< i<<"--"<<NoOfWays[i+1]<<endl;
}
return NoOfWays[n+1];
}
int main()
{
char digits[] = "1212";
int n = strlen(digits);
cout << "Count is " <<digits<<"="<< countDecodingDP(digits, n)<<endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGNzdGRsaWI+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKaW50IGNvdW50RGVjb2RpbmdEUChjaGFyICpkaWdpdHMsIGludCBuKQp7CiAgICBpbnQgTm9PZldheXNbbisxXTsKIAlOb09mV2F5c1swXT0xOwogCU5vT2ZXYXlzWzFdPTE7CiAJCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICB7CiAgICAgICAgaW50IHE9ZGlnaXRzW2ldLTQ4OwogICAgICAgIGludCBwPWRpZ2l0c1tpLTFdLTQ4OwogICAgICAgIC8vdG8gY29udmVydCB0byBkaWdpdAogICAgICAgIAogICAgICAgIGlmIChxIDw9IDI2ICYmIHEgPiAwKSBOb09mV2F5c1sgaSsxIF0gPSBOb09mV2F5c1sgaSBdOwoJCWlmICgocSArIHAqMTApIDw9IDI2ICYmIChxICsgcCoxMCk+MCApIE5vT2ZXYXlzWyBpKzEgXSArPSBOb09mV2F5c1sgaSAtIDEgXTsKCQljb3V0IDw8IHAgPDwiLS0iPDwgcSA8PCItLSI8PCBpPDwiLS0iPDxOb09mV2F5c1tpKzFdPDxlbmRsOwogICAgfQogICAgcmV0dXJuIE5vT2ZXYXlzW24rMV07Cn0KCmludCBtYWluKCkKewogICAgY2hhciBkaWdpdHNbXSA9ICIxMjEyIjsKICAgIGludCBuID0gc3RybGVuKGRpZ2l0cyk7CiAgICBjb3V0IDw8ICJDb3VudCBpcyAiIDw8ZGlnaXRzPDwiPSI8PCBjb3VudERlY29kaW5nRFAoZGlnaXRzLCBuKTw8ZW5kbDsKCn0=