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
#include <bits/stdc++.h>
#define K pair<pair<int, int>, pair<int, int>>
#define aa first.first
#define bb first.second
#define cc second.first
#define ll second.second
using namespace std;

int main() {

  int A, B, C;
  int a, b, c;

  scanf("%d %d %d", &A, &B, &C);
  scanf("%d %d %d", &a, &b, &c);

  vector<int> v(C+1, INT_MAX);

  queue<K> q;
  set<K> s;
  q.push({{a, b}, {c, 0}});
  s.insert({{a, b}, {c, 0}});

  while(!q.empty()) {
    K k = q.front();
    q.pop();

    v[k.aa] = min(v[k.aa], k.ll);
    v[k.bb] = min(v[k.bb], k.ll);
    v[k.cc] = min(v[k.cc], k.ll);

    // a->b
    int r = min(k.aa, B-k.bb);
    if(s.find({{k.aa-r, k.bb+r}, {k.cc, 0}}) == s.end()) {
      q.push({{k.aa-r, k.bb+r}, {k.cc, k.ll+1}});
      s.insert({{k.aa-r, k.bb+r}, {k.cc, 0}});
    }

    // a->c
    r = min(k.aa, C-k.cc);
    if(s.find({{k.aa-r, k.bb}, {k.cc+r, 0}}) == s.end()) {
      q.push({{k.aa-r, k.bb}, {k.cc+r, k.ll+1}});
      s.insert({{k.aa-r, k.bb}, {k.cc+r, 0}});
    }

    // b->a
    r = min(k.bb, A-k.aa);
    if(s.find({{k.aa+r, k.bb-r}, {k.cc, 0}}) == s.end()) {
      q.push({{k.aa+r, k.bb-r}, {k.cc, k.ll+1}});
      s.insert({{k.aa+r, k.bb-r}, {k.cc, 0}});
    }

    // b->c
    r = min(k.bb, C-k.cc);
    if(s.find({{k.aa, k.bb-r}, {k.cc+r, 0}}) == s.end()) {
      q.push({{k.aa, k.bb-r}, {k.cc+r, k.ll+1}});
      s.insert({{k.aa, k.bb-r}, {k.cc+r, 0}});
    }

    // c->a
    r = min(k.cc, A-k.aa);
    if(s.find({{k.aa+r, k.bb}, {k.cc-r, 0}}) == s.end()) {
      q.push({{k.aa+r, k.bb}, {k.cc-r, k.ll+1}});
      s.insert({{k.aa+r, k.bb}, {k.cc-r, 0}});
    }

    // c->b
    r = min(k.cc, B-k.bb);
    if(s.find({{k.aa, k.bb+r}, {k.cc-r, 0}}) == s.end()) {
      q.push({{k.aa, k.bb+r}, {k.cc-r, k.ll+1}});
      s.insert({{k.aa, k.bb+r}, {k.cc-r, 0}});
    }

  }

  for(int i = 0; i <= C; i++) {
    printf("%d ", v[i] == INT_MAX ? -1 : v[i]);
  }

}