1if (m >= 1) {
2  S1(0, 1, 1, 1);
3  if (m >= 2) {
4    S4(0, 1, 2, 2, 1, 1, 2, 2);
5    S3(0, 1, 1, 2, 1, 1, 1, 2);
6    S2(0, 1, 1, 1, 1, 1, 2, 1);
7  }
8  S8(0, 1);
9  for (int c0 = 1; c0 < 2 * m - 1; c0 += 1) {
10    if (2 * m >= c0 + 3) {
11      if (c0 + 1 == m) {
12        S5(m - 2, 1, m - 1, 1, m - 1, 1, m, 1);
13        S1(m - 1, 1, m, 1);
14        S3(m - 1, 1, m, 2, m, 1, m, 2);
15      } else if (c0 >= m) {
16        S5(c0 - 1, -m + c0 + 2, c0, -m + c0 + 2, m - 1, -m + c0 + 2, m, -m + c0 + 2);
17        S6(c0 - 1, -m + c0 + 1, c0, -m + c0 + 2, m, -m + c0 + 1, m, -m + c0 + 2);
18        S1(c0, -m + c0 + 2, m, -m + c0 + 2);
19        S3(c0, -m + c0 + 2, c0 + 1, -m + c0 + 3, m, -m + c0 + 2, m, -m + c0 + 3);
20      } else {
21        S5(c0 - 1, 1, c0, 1, c0, 1, c0 + 1, 1);
22        S1(c0, 1, c0 + 1, 1);
23        S3(c0, 1, c0 + 1, 2, c0 + 1, 1, c0 + 1, 2);
24        S4(c0, 1, c0 + 2, 2, c0 + 1, 1, c0 + 2, 2);
25        S2(c0, 1, c0 + 1, 1, c0 + 1, 1, c0 + 2, 1);
26      }
27      for (int c1 = max(2, -m + c0 + 3); c1 <= min(m - 1, c0); c1 += 1) {
28        S5(c0 - 1, c1, c0, c1, c0 - c1 + 1, c1, c0 - c1 + 2, c1);
29        S6(c0 - 1, c1 - 1, c0, c1, c0 - c1 + 2, c1 - 1, c0 - c1 + 2, c1);
30        S7(c0 - 1, c1 - 1, c0 + 1, c1, c0 - c1 + 2, c1 - 1, c0 - c1 + 3, c1);
31        S1(c0, c1, c0 - c1 + 2, c1);
32        S3(c0, c1, c0 + 1, c1 + 1, c0 - c1 + 2, c1, c0 - c1 + 2, c1 + 1);
33        S4(c0, c1, c0 + 2, c1 + 1, c0 - c1 + 2, c1, c0 - c1 + 3, c1 + 1);
34        S2(c0, c1, c0 + 1, c1, c0 - c1 + 2, c1, c0 - c1 + 3, c1);
35      }
36      if (c0 + 1 == m) {
37        S6(m - 2, m - 1, m - 1, m, 1, m - 1, 1, m);
38        S7(m - 2, m - 1, m, m, 1, m - 1, 2, m);
39        S1(m - 1, m, 1, m);
40        S2(m - 1, m, m, m, 1, m, 2, m);
41      } else if (c0 >= m) {
42        S5(c0 - 1, m, c0, m, -m + c0 + 1, m, -m + c0 + 2, m);
43        S6(c0 - 1, m - 1, c0, m, -m + c0 + 2, m - 1, -m + c0 + 2, m);
44        S7(c0 - 1, m - 1, c0 + 1, m, -m + c0 + 2, m - 1, -m + c0 + 3, m);
45        S1(c0, m, -m + c0 + 2, m);
46        S2(c0, m, c0 + 1, m, -m + c0 + 2, m, -m + c0 + 3, m);
47      } else {
48        S6(c0 - 1, c0, c0, c0 + 1, 1, c0, 1, c0 + 1);
49        S7(c0 - 1, c0, c0 + 1, c0 + 1, 1, c0, 2, c0 + 1);
50        S1(c0, c0 + 1, 1, c0 + 1);
51        S3(c0, c0 + 1, c0 + 1, c0 + 2, 1, c0 + 1, 1, c0 + 2);
52        S4(c0, c0 + 1, c0 + 2, c0 + 2, 1, c0 + 1, 2, c0 + 2);
53        S2(c0, c0 + 1, c0 + 1, c0 + 1, 1, c0 + 1, 2, c0 + 1);
54      }
55    } else {
56      S5(2 * m - 3, m, 2 * m - 2, m, m - 1, m, m, m);
57      S6(2 * m - 3, m - 1, 2 * m - 2, m, m, m - 1, m, m);
58      S1(2 * m - 2, m, m, m);
59    }
60    for (int c2 = max(1, -m + c0 + 2); c2 <= min(m, c0 + 1); c2 += 1)
61      S8(c0, c2);
62  }
63}
64