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
#include <bits/stdc++.h>

using namespace std;

struct xd
{
    int a;
    int b;
    int c;
    int r;
};

int x,y,z,a,b,c;
int w[100005];
queue <xd> q;
map < pair<pair<int,int>,int>,bool > m;

void wrzuc (int a, int b, int c, int r)
{
    xd tmp;
    tmp.a=a;
    tmp.b=b;
    tmp.c=c;
    tmp.r=r;
    q.push(tmp);
}

void policz(int a,int b,int c, int r)
{
    xd p;
    p.a=a;
    p.b=b;
    p.c=c;
    p.r=1;
    q.push(p);
    while (!q.empty())
    {
        p=q.front();
        q.pop();
        a=p.a;
        b=p.b;
        c=p.c;
        r=p.r;
        //cout << p.a << " " << p.b << " " << p.c << " " << p.r << endl;
        if (m[{{a,b},c}]) continue;
        else m[{{a,b},c}]=1;
        if (w[a]==0) w[a]=r;
        if (w[b]==0) w[b]=r;
        if (w[c]==0) w[c]=r;
        if (a+b<=y) wrzuc(0,a+b,c,r+1);
        else wrzuc(a-y+b,y,c,r+1);
        if (a+c<=z) wrzuc(0,b,c+a,r+1);
        else wrzuc(a-z+c,b,z,r+1);
        if (b+a<=x) wrzuc(a+b,0,c,r+1);
        else wrzuc(x,b-x+a,c,r+1);
        if (b+c<=z) wrzuc(a,0,b+c,r+1);
        else wrzuc(a,b-z+c,z,r+1);
        if (c+a<=x) wrzuc(c+a,b,0,r+1);
        else wrzuc(x,b,c-x+a,r+1);
        if (c+b<=y) wrzuc(a,c+b,0,r+1);
        else wrzuc(a,y,c-y+b,r+1);
    }
}

int main()
{
    scanf("%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c);
    policz(a,b,c,1);
    for (int i=0; i<=z; i++)
    {
        printf("%d ",w[i]-1);
    }
}