1 for (int c0 = 2; c0 < 3 * M; c0 += 1) {
2   if ((c0 + 1) % 3 == 0)
3     S1((c0 + 1) / 3);
4   for (int c1 = (c0 + 1) / 3 + 1; c1 <= min(M, c0 - 2); c1 += 1)
5     for (int c2 = -c1 + (c0 + c1 + 1) / 2 + 1; c2 <= min(c1, c0 - c1); c2 += 1)
6       S3(c0 - c1 - c2 + 1, c1, c2);
7   for (int c1 = -c0 + 2 * ((2 * c0 + 1) / 3) + 2; c1 <= min(M, c0); c1 += 2)
8     S2(((c0 - c1) / 2) + 1, c1);
9 }
10