1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <bits/stdc++.h>
#define d n.size()
using namespace std;

string n;
vector<int>T[10000];
int i[200], j, k;
long long wynik, ile=1, wynikc, pozycja;
long long Val[109];

void Partycjon(int A, int B)
{
    if (A==0){
        for (j=0; j<B; ++j)
            T[ile].push_back(i[j]);
        ++ile;
    }
    else if (A>0){
        i[B]=1;
        Partycjon(A-1, B+1);
        if(A>=2){
            i[B]=2;
            Partycjon(A-2, B+1);
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    for(j=0; j<=9; ++j)
        Val[j]=j+1;

    for (j=10; j<=18; ++j)
        Val[j]=18-j+1;

    cin>>n;
    Partycjon(d, 0);
    ile-=1;

    //Rozbicie napisu na odpowiednia liczbe czesci
    //Sprawdzenie na ile sposobow mozna je dodac
    for (j=1; j<=ile; ++j){
        wynikc=1;
        pozycja=0;
        for (k=0; k<T[j].size(); ++k){
            string A;
            int x;
            if (T[j][k]==1){
                x=n[pozycja]-'0';
                ++pozycja;
                wynikc=wynikc*Val[x];
                //cout<<x<<" ";
            }
            else{
                x=10*(n[pozycja]-'0')+(n[++pozycja]-'0');
                if(x==0)
                    x=99;
                ++pozycja;
                wynikc=wynikc*Val[x];
                //cout<<x<<" ";
            }
        }
        //cout<<wynikc<<"\n";
        wynik+=wynikc;
    }

    cout<<wynik;



    return 0;
}