#include "bits/stdc++.h" using namespace std; #define DEBUG(x) cout<<#x<<": "< #define vl vector #define vii vector< vector > #define vll vector< vector > #define vs vector #define pii pair #define pis pair #define psi pair #define pll pair #define fi first #define se second #define rep(i,n) for(int i=0;i<(int)(n);i++) #define rep1(i,n) for(int i=1;i<=(int)(n);i++) #define all(c) c.begin(),c.end() const int inf = 1000000001; const ll INF = 2e18; const ll MOD = 1000000007; //const ll mod = 1000000009; const double pi = 3.14159265358979323846; #define Sp(p) cout<= MOD ? a.n - a.Mod : a.n); } Modint operator-(Modint a, Modint b) { return Modint((a.n -= b.n) < 0 ? a.n + a.Mod : a.n); } Modint operator*(Modint a, Modint b) { return Modint(1LL * a.n * b.n % a.Mod); } Modint &operator+=(Modint &a, Modint b) { return a = a + b; } Modint &operator-=(Modint &a, Modint b) { return a = a - b; } Modint &operator*=(Modint &a, Modint b) { return a = a * b; } typedef vector vec; typedef vector mat; mat mul(mat &A, mat &B) { mat C(A.size(), vec(B[0].size())); for (int i = 0; i < A.size(); i++) { for (int k = 0; k < B.size(); k++) { for (int j = 0; j < B[0].size(); j++) { C[i][j] = C[i][j] + A[i][k] * B[k][j]; } } } return C; } vec mul(mat &A, vec &B) { vec C(A.size()); for (int i = 0; i < A.size(); i++) { for (int j = 0; j < B.size(); j++) { C[i] += A[i][j] * B[j]; } } return C; } mat pow(mat A, ll n) { mat B(A.size(), vec(A.size())); for (int i = 0; i < A.size(); i++) { B[i][i] = 1; } while (n > 0) { if (n & 1)B = mul(B, A); A = mul(A, A); n >>= 1; } return B; } int main() { ll n, px, py; cin >> n >> px >> py; vector c(n); rep(i, n) { cin >> c[i].first; if (c[i].first != 3) { cin >> c[i].second; } } vector ans(n); vec first = { px,py,1 }; mat A = { {1,0,0}, {0,1,0},{0,0,1} }; for (int i = n - 1; i >= 0; i--) { if (c[i].first == 1) { mat B = { {1,0,c[i].second},{0,1,0},{0,0,1} }; A = mul(A, B); } else if (c[i].first == 2) { mat B = { { 1,0,0 },{ 0,1,c[i].second },{ 0,0,1 } }; A = mul(A, B); } else { mat B = { { 0,1,0 },{ -1,0,0 },{ 0,0,1 } }; A = mul(A, B); } vec now = mul(A, first); ans[i] = pll(now[0], now[1]); } rep(i, n) { cout << ans[i].first << " " << ans[i].second << endl; } }