#define _USE_MATH_DEFINES #include "bits/stdc++.h" using namespace std; #define FOR(i,j,k) for(int (i)=(j);(i)<(int)(k);++(i)) #define rep(i,j) FOR(i,0,j) #define each(x,y) for(auto &(x):(y)) #define mp make_pair #define MT make_tuple #define all(x) (x).begin(),(x).end() #define debug(x) cout<<#x<<": "<<(x)< >(b,vector(c,d)) #define vvv(a,b,c,d,e) vector > >(b,vv(a,c,d,e)) using ll = long long; using pii = pair; using vi = vector; using vll = vector; template class Matrix { public: int n, m; Matrix() { } Matrix(int n_, int m_) :n(n_), m(m_), A(n, vector(m)) { } #define ITER(a,b) for(int i=0;i 0) { if (k & 1) C *= D; D *= D; k >>= 1; } return C; } vector& operator[](int i) { return A[i]; } vector mulVec(const vector & u) { assert((int)u.size() == m); Matrix v(m, 1); for (int i = 0; i < m; ++i)v[i][0] = u[i]; v = (*this)*v; vector w(n); for (int i = 0; i < n; ++i)w[i] = v[i][0]; return w; } private: vector> A; }; typedef Matrix mat; int main() { ios::sync_with_stdio(false); cin.tie(0); cout << fixed << setprecision(20); int N, PX, PY; while (cin >> N >> PX >> PY) { mat A(3, 3), E = A; rep(a, 3)E[a][a] = 1; A = E; vi command(N), diff(N); rep(a, N) { cin >> command[a]; if (command[a] <= 2)cin >> diff[a]; } vi u(3, 1); u[0] = PX; u[1] = PY; vi rex(N), rey(N); for (int a = N - 1; a >= 0; --a) { int p = command[a]; mat B = E; if (p == 1) { B[0][2] = diff[a]; } else if (p == 2) { B[1][2] = diff[a]; } else { B[0][0] = B[1][1] = 0; B[0][1] = 1; B[1][0] = -1; } A = A * B; auto v = A.mulVec(u); rex[a] = v[0]; rey[a] = v[1]; } rep(a, N)cout << rex[a] << ' ' << rey[a] << endl; } }