#include #define ll long long #define ull unsigned long long #define int ll const int N = 100000 + 100; const int inf = 1e9 + 7; using namespace std; inline int read () { int x = 0, k = 1; char c = getchar(); while (c < '0' || c > '9') { if (c == '-') k = -1; c = getchar(); } while (c >= '0' && c <= '9') x = (x << 3) + (x << 1) + (c ^ 48), c = getchar(); return x * k; } const int M = 4; struct Matrix { // thk sysulby. int r, c, a[M][M]; Matrix (int r = 3, int c = 3, int p = 0): r(r), c(c) { memset(a, 0, sizeof(a)); for (int i = 0; i < r && i < c; ++i) a[i][i] = p; } int* operator[] (int i) { return a[i]; } const int* operator[] (int i) const { return a[i]; } Matrix operator + (const Matrix &m) const { Matrix ret(r, c); for (int i = 0; i < r; ++i) for (int j = 0; j < c; ++j) ret[i][j] = (a[i][j] + m[i][j]); return ret; } Matrix operator * (const Matrix &m) const { Matrix ret(r, m.c); for (int i = 0; i < r; ++i) for (int j = 0; j < m.c; ++j) for (int k = 0; k < c; ++k) ret[i][j] = (ret[i][j] + a[i][k] * m[k][j]); return ret; } Matrix pow (int b) { Matrix a = *this, ret(r, r, 1); while (b) { if (b & 1) ret = ret * a; a = a * a, b >>= 1; } return ret; } }; int n, Px, Py, x[N], y[N]; Matrix a[N]; Matrix O(3, 3, 1); signed main() { // freopen("Test.in", "r", stdin); // freopen("Test.out", "w", stdout); n = read(), Px = read(), Py = read(); for (int i = 1; i <= n; ++i) { int o = read(), d = (o == 3) ? (0) : read(); if (o == 1) a[i] = O, a[i][0][2] = d; if (o == 2) a[i] = O, a[i][1][2] = d; if (o == 3) a[i][0][1] = 1, a[i][1][0] = -1, a[i][2][2] = 1; } for (int i = n; i >= 1; --i) O = O * a[i], x[i] = O[0][0] * Px + O[0][1] * Py + O[0][2], y[i] = O[1][0] * Px + O[1][1] * Py + O[1][2]; for (int i = 1; i <= n; ++i) printf("%lld %lld\n", x[i], y[i]); return 0; } /* */