#include using namespace std; #include using namespace atcoder; using mint = modint; int main() { int N, B, Q; cin >> N >> B >> Q; mint::set_mod(B); // x[j], y[j], z[j] : X[i], Y[i], Z[i] が j 回操作された後の値(i によらない) vector x(Q + 1), y(Q + 1), z(Q + 1); x[0] = y[0] = z[0] = 1; for (int j = 0; j < Q; j++) { x[j + 1] = x[j] + 1; y[j + 1] = 3 * y[j] + 2 * x[j + 1] * z[j]; z[j + 1] = 3 * z[j]; } // 操作された回数だけを覚えておくためのフェニック木 fenwick_tree fen(N + 1); while(Q--) { int l, m, r; cin >> l >> m >> r; l--; // 区間加算 & 1点参照は,1点加算 & 1点減算 & 左からの区間総和 で代用できる. fen.add(l, 1); fen.add(r, -1); int j = fen.sum(0, m); cout << x[j].val() << " " << y[j].val() << " " << z[j].val() << endl; } }