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
#include<bits/stdc++.h>
using namespace std;
int check (int A, int B, int C, int A1, int B1, int C1, int i)
{
	int odp = 10;
		if(i<=A)
			{
					/* wlewanie pojedyncze */
					if(A1+B1 == i)
					{
						odp = min(odp, 1);
					}
					if(A1+C1 == i)
					{
						odp = min(odp, 1);
					}
					if(A1+B1+C1 == i)
					{
						odp = min(odp, 2);
					}
					/* jedna do drugiej i reszta do trzeciej*/
					int brakb1 = B - B1;
					int cowC = max(0, C1 - brakb1);
					if(A1 + cowC == i)
					{
						odp = min(odp, 2);
					}
					int brakc1 = C - C1;
					int cowB = max(0, B1 - brakc1);
					if(A1 + cowB == i)
					{
						odp = min(odp, 2);
					}
					/*wylewanie z A*/
					int cowAc = max(0, A1 - brakc1);
					if(cowAc == i)
					{
						odp = min(odp, 1);
					}
					if(cowAc + B1 == i)
					{
						odp = min(odp, 2);
					}
					int cowAb = max(0, A1 - brakb1);
					if(cowAb + C1 == i)
					{
						odp = min(odp, 2);
					}
					if(cowAb == i)
					{
						odp = min(odp, 1);
					}
					if(A1 - brakb1 == i)
					{
						odp = min(odp, 1);
					}
					if(A1 - brakc1 == i)
					{
						odp = min(odp, 1);
					}
					if(A1 - brakc1 - brakb1 == i)
					{
						odp = min(odp, 2);
					}
					
			}
					return odp;
}
int main()
{
	int A, B, C;
	scanf("%d%d%d", &A, &B, &C);
	int A1, B1, C1;
	scanf("%d%d%d", &A1, &B1, &C1);
	for(int i=0; i<=C; i++)
	{
		if(A1+B1+C1<i)
		{
		printf("-1 ");	
		}	
		else
		{
			int odp=10;
			if(A1==i||B1==i||C1==i)
			printf("0 ");
			else
			{
				odp = min(odp, check(A, B, C, A1, B1, C1, i));
				odp = min(odp, check(B, C, A, B1, C1, A1, i));
				odp = min(odp, check(C, A, B, C1, A1, B1, i));
				if(odp==10)
				printf("-1 ");
				else
				printf("%d ", odp);
			}
		}	
	}
	return 0;
}