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
#include <iostream>

using namespace std;

typedef struct {
    long a, b, c;
    long i;
} zestaw;
zestaw val[1000000];
long n, cur;
//long ile;
long but_a, but_b, but_c;
short wynik[100001];

int szukaj(zestaw a) {
    for (long i = 0; i < n; i++)
        if (val[i].a == a.a && val[i].b == a.b && val[i].c == a.c) return 1;
    return 0;
}

int main()
{
    zestaw z;
    long p;
    cin >> but_a >> but_b >> but_c;
    cin >> val[0].a >> val[0].b >> val[0].c;
    val[0].i = 1;
    n = 1; cur = 0;
    
    while (cur < n) {
        if (wynik[val[cur].a] == 0 || wynik[val[cur].a] > val[cur].i) wynik[val[cur].a] = val[cur].i;
        if (wynik[val[cur].b] == 0 || wynik[val[cur].b] > val[cur].i) wynik[val[cur].b] = val[cur].i;
        if (wynik[val[cur].c] == 0 || wynik[val[cur].c] > val[cur].i) wynik[val[cur].c] = val[cur].i;
        z.i = val[cur].i + 1;
        if (val[cur].a > 0 && val[cur].b < but_b) {
            p = (val[cur].a + val[cur].b <= but_b ? val[cur].a : but_b - val[cur].b);
            z.a = val[cur].a - p; z.b = val[cur].b + p; z.c = val[cur].c;
            if (!szukaj(z)) {
                val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++;
            }
        }
        if (val[cur].a > 0 && val[cur].c < but_c) {
            p = (val[cur].a + val[cur].c <= but_c ? val[cur].a : but_c - val[cur].c);
            z.a = val[cur].a - p; z.b = val[cur].b; z.c = val[cur].c + p;
            if (!szukaj(z)) {
                val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++;
            }
        }
        if (val[cur].b > 0 && val[cur].a < but_a) {
            p = (val[cur].b + val[cur].a <= but_a ? val[cur].b : but_a - val[cur].a);
            z.a = val[cur].a + p; z.b = val[cur].b - p; z.c = val[cur].c;
            if (!szukaj(z)) {
                val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++;
            }
        }
        if (val[cur].b > 0 && val[cur].c < but_c) {
            p = (val[cur].b + val[cur].c <= but_c ? val[cur].b : but_c - val[cur].c);
            z.a = val[cur].a; z.b = val[cur].b - p; z.c = val[cur].c + p;
            if (!szukaj(z)) {
                val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++;
            }
        }
        if (val[cur].c > 0 && val[cur].a < but_a) {
            p = (val[cur].c + val[cur].a <= but_a ? val[cur].c : but_a - val[cur].a);
            z.a = val[cur].a + p; z.b = val[cur].b; z.c = val[cur].c - p;
            if (!szukaj(z)) {
                val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++;
            }
        }
        if (val[cur].c > 0 && val[cur].b < but_b) {
            p = (val[cur].c + val[cur].b <= but_b ? val[cur].c : but_b - val[cur].b);
            z.a = val[cur].a; z.b = val[cur].b + p; z.c = val[cur].c - p;
            if (!szukaj(z)) {
                val[n].a = z.a; val[n].b = z.b; val[n].c = z.c; val[n].i = z.i; n++;
            }
        }
        cur++;
    }
    
//    przelewaj(akt, 1);
    
    for (long i = 0; i <= but_c; i++)
        cout << (wynik[i] - 1) << " ";
    return 0;
}