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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

unsigned long long z;
unsigned long long n;
unsigned long long tab[10];
unsigned long long tmp;

vector <unsigned long long> input;
vector <unsigned long long> sinput;

map <unsigned long long, unsigned long long> wyniki[10];

unsigned long long zabawa(unsigned long long x)
{
    if (x == 0)
    {
        return 0;
    }
    
    unsigned long long result = 1;

    while (x > 0)
    {
        result *= (x%10);
        x = x / 10;
    }
    
    return result;
}

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

    cin >> z;
    for (unsigned long long zz = 0; zz < z; zz++)
    {
        cin >> n;

        input.push_back(n);
        sinput.push_back(n);
    }

    sort(sinput.begin(), sinput.end());

    for(unsigned long long j=0;j<10;j++)
    {
        tab[j] = 0;
    }

    n = 1;

    for (unsigned long long j = 0; j < sinput.size(); j++)
    {
        for(unsigned long long i=n; i <= sinput[j]; i++)
        {
            tmp = i;
    
            while (tmp >= 10)
            {
                tmp = zabawa(tmp);
            }
    
            tab[tmp]++;
        }
        n = sinput[j] + 1;

        for(unsigned long long k=0;k<10;k++)
        {
            wyniki[k][sinput[j]] = tab[k];
        }

    }
    
    for (unsigned long long i = 0; i < input.size(); i++)
    {
        for(unsigned long long k=0;k<10;k++)
        {
            cout << wyniki[k][input[i]] << ' ';
        }
        cout << '\n';   
    }

    return 0;
}