| 1 | if (M >= 0 && N >= 0) |
| 2 | for (int c0 = -4; c0 <= 3 * M + N; c0 += 1) { |
| 3 | if (3 * M >= c0 + 4 && (c0 + 1) % 3 == 0) { |
| 4 | S1((c0 + 4) / 3, 0); |
| 5 | } else if (c0 >= 3 * M) { |
| 6 | S2(M, -3 * M + c0); |
| 7 | } |
| 8 | for (int c1 = max(-3 * M + c0 + 3, (c0 + 6) % 3); c1 <= min(N - 1, c0); c1 += 3) { |
| 9 | S2((c0 - c1) / 3, c1); |
| 10 | S1(((c0 - c1) / 3) + 1, c1 + 1); |
| 11 | } |
| 12 | if (N >= c0 + 4 && c0 >= -3) { |
| 13 | S1(0, c0 + 4); |
| 14 | } else if (3 * M + N >= c0 + 3 && c0 >= N && (N - c0) % 3 == 0) { |
| 15 | S2((-N + c0) / 3, N); |
| 16 | } |
| 17 | for (int c1 = max(-3 * M + c0, (c0 + 6) % 3); c1 <= min(N, c0); c1 += 3) |
| 18 | S3((c0 - c1) / 3, c1); |
| 19 | } |
| 20 | |