#include<cstdio> #include<cstring> using namespace std; int left[100005], right[100005]; void link(int l, int r) { left[r] = l; right[l] = r; } int main() { int test = 0, op, x, y, temp, n, m; while (scanf ("%d %d", &n, &m) != EOF) { for (int i = 1; i <= n; ++i) { right[i] = i + 1; left[i] = i - 1; } right[n] = 0, left[0] = n, right[0] = 1; int reverse = 0; while (m--) { scanf ("%d", &op); if (op == 4) reverse = !reverse; else { scanf ("%d %d", &x, &y); if ( reverse && op != 3) { op = 3 - op; //翻转之后操作一变为把x移到y后面,操作二变为把x移到y前面。 } if (right[y] == x && op == 3) { temp = x; x = y; y = temp; } if ( (op == 1 && left[y] == x) || (op == 2 && right[y] == x)) continue; if (op == 1) { link (left[x], right[x]); link (left[y], x); link (x, y); } else if (op == 2) { link (left[x], right[x]); link (x, right[y]); link (y, x); } else if (y == right[x]) { link (left[x], y); link (x, right[y]); link (y, x); } else { int ry = right[y], ly = left[y]; link (left[x], y); link (y, right[x]); link (ly, x); link (x, ry); } } } int t = 0; long long ans = 0; for (int i = 1; i <= n; ++i) { t = right[t]; if (i % 2) ans += t; } if (n % 2 == 0 && reverse) //偶数位的和 ans = (long long) n / 2 * (1 + n) - ans; printf ("Case %d: %lld\n", ++test, ans); } return 0; }