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
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
#include <iostream>

using namespace std;
    int l_butelek, b1, b2, b3, z1, z2, z3, s1, s2, s3, s, p1, p2, p3, lprzel = 0, z01, z02, z03;
    void wroc() {
        z1 = z01; z2 = z02; z3 = z03; 
        p1 = b1-z1;
        p2 = b2-z2;
        p3 = b3-z3;   
    }


int main() {

    
    signed int *przelania;

    
    cin >> b1 >> b2 >> b3;
    cin >> z1 >> z2 >> z3;
    //b1 = 2; b2 = 15; b3 = 40;
    //z1 = 1; z2 = 10; z3 = 25;
    p1 = b1-z1;
    p2 = b2-z2;
    p3 = b3-z3;
    s1 = z1+z2;
    s2 = z2+z3;
    s3 = z1+z3;
    s = z1+z2+z3;
    z01 = z1; z02 = z2; z03 = z3;
    przelania = new int[b3+1];
    
    for (int i=0; i<b3+1; i++){
        przelania[i] = -1;
    } 

    // 0 przelań
    przelania[z1] = lprzel;
    przelania[z2] = lprzel;
    przelania[z3] = lprzel;

    // 1 przelanie
    lprzel++;
    if (s1 >= b2){
        if (przelania[b2]==-1) przelania[b2]=lprzel;
        if (przelania[b1]==-1) przelania[b1]=lprzel;
    } else {
        if (przelania[s1]==-1) przelania[s1]=lprzel;
        if (s1 >= b1){
            if (przelania[b1]==-1) przelania[b1]=lprzel;
        }
    }
    if (s2 >= b3){
        if (przelania[b2]==-1) przelania[b2]=lprzel;
        if (przelania[b3]==-1) przelania[b3]=lprzel;
    } else {
        if (przelania[s2]==-1) przelania[s2]=lprzel;
        if (s2 >= b2){
            if (przelania[b2]==-1) przelania[b2]=lprzel;
        }
    }
    if (s3 >= b3){
        if (przelania[b1]==-1) przelania[b1]=lprzel;
        if (przelania[b3]==-1) przelania[b3]=lprzel;
    } else {
        if (przelania[s1]==-1) przelania[s1]=lprzel;
        if (s3 >= b1){
            if (przelania[b1]==-1) przelania[b1]=lprzel;
        }
    }

    if (((z1<=p2)||(z1<=p3)||(z2<=p1)||(z2<=p3)||(z3<=p1)||(z3<=p2))&&(przelania[0]==-1)) {
        przelania[0]=lprzel;
    }
    if (z2 >= p1) if (przelania[z2-p1]==-1) przelania[z2-p1]=lprzel;
    if (z3 >= p1) if (przelania[z3-p1]==-1) przelania[z3-p1]=lprzel;
    if (z1 >= p2) if (przelania[z1-p2]==-1) przelania[z1-p2]=lprzel;
    if (z3 >= p2) if (przelania[z3-p2]==-1) przelania[z3-p2]=lprzel;
    if (z1 >= p3) if (przelania[z1-p3]==-1) przelania[z1-p3]=lprzel;
    if (z2 >= p3) if (przelania[z2-p3]==-1) przelania[z2-p3]=lprzel;

    // 2 przelania
    lprzel++;
    if (s >= b3){
        if (przelania[b3]==-1) przelania[b3]=lprzel;
        if (przelania[b2]==-1) przelania[b2]=lprzel;
        if (przelania[b1]==-1) przelania[b1]=lprzel;
    } else if (s >= b2){
        if (przelania[b2]==-1) przelania[b2]=lprzel;
        if (przelania[b1]==-1) przelania[b1]=lprzel;
    } else if (s >= b1){
        if (przelania[b1]==-1) przelania[b1]=lprzel;
    }
 // for (int i=0; i<b3; i++){
    //zmiana zawartości 1->2
    if (z1 >= p2) {
        z1 -= p2;
        p1 += p2;
        z2 = b2;
        p2 = 0;
        if (z2 >= p1) if (przelania[z2-p1]==-1) przelania[z2-p1]=lprzel;
        if (z3 >= p1) if (przelania[z3-p1]==-1) przelania[z3-p1]=lprzel;
        if (z1 >= p3) if (przelania[z1-p3]==-1) przelania[z1-p3]=lprzel;
        if (z2 >= p3) if (przelania[z2-p3]==-1) przelania[z2-p3]=lprzel;
    } else {
        z2 += z1;
        p2 -= z1;
        z1 = 0;
        p1 = b1;
        if (z2 >= p1) if (przelania[z2-p1]==-1) przelania[z2-p1]=lprzel;
        if (z3 >= p1) if (przelania[z3-p1]==-1) przelania[z3-p1]=lprzel;
        if (z3 >= p2) if (przelania[z3-p2]==-1) przelania[z3-p2]=lprzel;
        if (z2 >= p3) if (przelania[z2-p3]==-1) przelania[z2-p3]=lprzel;
    }
    wroc();
    //zmiana zawartości 1->3
    if (z1 >= p3) {
        z1 -= p3;
        p1 += p3;
        z3 = b3;
        p3 = 0;
        if (z2 >= p1) if (przelania[z2-p1]==-1) przelania[z2-p1]=lprzel;
        if (z3 >= p1) if (przelania[z3-p1]==-1) przelania[z3-p1]=lprzel;
        if (z1 >= p2) if (przelania[z1-p2]==-1) przelania[z1-p2]=lprzel;
        if (z3 >= p2) if (przelania[z3-p2]==-1) przelania[z3-p2]=lprzel;
    } else {
        z3 += z1;
        p3 -= z1;
        z1 = 0;
        p1 = b1;
        if (z2 >= p1) if (przelania[z2-p1]==-1) przelania[z2-p1]=lprzel;
        if (z3 >= p1) if (przelania[z3-p1]==-1) przelania[z3-p1]=lprzel;
        if (z3 >= p2) if (przelania[z3-p2]==-1) przelania[z3-p2]=lprzel;
        if (z2 >= p3) if (przelania[z2-p3]==-1) przelania[z2-p3]=lprzel;
    }
    wroc();
    //zmiana zawartości 2->1
    if (z2 >= p1) {
        z2 -= p1;
        p2 += p1;
        z1 = b1;
        p1 = 0;
        if (z1 >= p2) if (przelania[z1-p2]==-1) przelania[z1-p2]=lprzel;
        if (z3 >= p2) if (przelania[z3-p2]==-1) przelania[z3-p2]=lprzel;
        if (z1 >= p3) if (przelania[z1-p3]==-1) przelania[z1-p3]=lprzel;
        if (z2 >= p3) if (przelania[z2-p3]==-1) przelania[z2-p3]=lprzel;
    } else {
        z1 += z2;
        p1 -= z2;
        z2 = 0;
        p2 = b2;
        if (z3 >= p1) if (przelania[z3-p1]==-1) przelania[z3-p1]=lprzel;
        if (z1 >= p2) if (przelania[z1-p2]==-1) przelania[z1-p2]=lprzel;
        if (z3 >= p2) if (przelania[z3-p2]==-1) przelania[z3-p2]=lprzel;
        if (z1 >= p3) if (przelania[z1-p3]==-1) przelania[z1-p3]=lprzel;
    }
    wroc();
    //zmiana zawartości 2->3
    if (z2 >= p3) {
        z2 -= p3;
        p2 += p3;
        z3 = b3;
        p3 = 0;
        if (z2 >= p1) if (przelania[z2-p1]==-1) przelania[z2-p1]=lprzel;
        if (z3 >= p1) if (przelania[z3-p1]==-1) przelania[z3-p1]=lprzel;
        if (z1 >= p2) if (przelania[z1-p2]==-1) przelania[z1-p2]=lprzel;
        if (z3 >= p2) if (przelania[z3-p2]==-1) przelania[z3-p2]=lprzel;
    } else {
        z3 += z2;
        p3 -= z2;
        z2 = 0;
        p2 = b2;
        if (z3 >= p1) if (przelania[z3-p1]==-1) przelania[z3-p1]=lprzel;
        if (z1 >= p2) if (przelania[z1-p2]==-1) przelania[z1-p2]=lprzel;
        if (z3 >= p2) if (przelania[z3-p2]==-1) przelania[z3-p2]=lprzel;
        if (z1 >= p3) if (przelania[z1-p3]==-1) przelania[z1-p3]=lprzel;
    }
    wroc();
    //zmiana zawartości 3->1
    if (z3 >= p1) {
        z3 -= p1;
        p3 += p1;
        z1 = b1;
        p1 = 0;
        if (z1 >= p2) if (przelania[z1-p2]==-1) przelania[z1-p2]=lprzel;
        if (z3 >= p2) if (przelania[z3-p2]==-1) przelania[z3-p2]=lprzel;
        if (z1 >= p3) if (przelania[z1-p3]==-1) przelania[z1-p3]=lprzel;
        if (z2 >= p3) if (przelania[z2-p3]==-1) przelania[z2-p3]=lprzel;
    } else {
        z1 += z3;
        p1 -= z3;
        z3 = 0;
        p3 = b3;
        if (z2 >= p1) if (przelania[z2-p1]==-1) przelania[z2-p1]=lprzel;
        if (z1 >= p2) if (przelania[z1-p2]==-1) przelania[z1-p2]=lprzel;
        if (z1 >= p3) if (przelania[z1-p3]==-1) przelania[z1-p3]=lprzel;
        if (z2 >= p3) if (przelania[z2-p3]==-1) przelania[z2-p3]=lprzel;
    }
    wroc();
    //zmiana zawartości 3->2
    if (z3 >= p2) {
        z3 -= p2;
        p3 += p2;
        z2 = b2;
        p2 = 0;
        if (z2 >= p1) if (przelania[z2-p1]==-1) przelania[z2-p1]=lprzel;
        if (z3 >= p1) if (przelania[z3-p1]==-1) przelania[z3-p1]=lprzel;
        if (z1 >= p3) if (przelania[z1-p3]==-1) przelania[z1-p3]=lprzel;
        if (z2 >= p3) if (przelania[z2-p3]==-1) przelania[z2-p3]=lprzel;
    } else {
        z2 += z3;
        p2 -= z3;
        z3 = 0;
        p3 = b3;
        if (z2 >= p1) if (przelania[z2-p1]==-1) przelania[z2-p1]=lprzel;
        if (z1 >= p2) if (przelania[z1-p2]==-1) przelania[z1-p2]=lprzel;
        if (z1 >= p3) if (przelania[z1-p3]==-1) przelania[z1-p3]=lprzel;
        if (z2 >= p3) if (przelania[z2-p3]==-1) przelania[z2-p3]=lprzel;
    }
    wroc();
 //   lprzel++;
 // }
    lprzel = 1;
    while ((z2 > b1)&&(z3+b1<=b3)) {
        z2 -= p1;
        if (przelania[z2]==-1) przelania[z2]=lprzel;
        z1 = b1;
        z3 += z1;
        z1 = 0;
        p1 = b1;
        lprzel += 2;
    }
    
    for (int i=0; i<b3+1; i++){
        cout << przelania[i] << ' ';
    } 
    return 0;
}