#include using namespace std; #define rep(i,s,e) for(int (i) = (s);(i) <= (e);(i)++) #include #include using namespace std; #define int long long template struct Matrix { vector> value; T init; Matrix(vector> vec, T init_) : init(init_), value(vec) {} Matrix(int h, int w, T init_) : init(init_), value(h, vector(w, init_)) {} Matrix operator*(Matrix& left) { Matrix res(value.size(), left[0].size(), init); for (int i = 0; i < value.size(); i++) { for (int k = 0; k < left.size(); k++) { for (int j = 0; j < left[0].size(); j++) { res[i][j] = (res[i][j] + value[i][k] * left[k][j]); } } } return res; } Matrix operator+(Matrix& left) { Matrix res = *this; for (int i = 0; i < res.size(); i++) { for (int j = 0; j < res[0].size(); j++) { res[i][j] += left[i][j]; } } return res; } Matrix operator*(T c) { Matrix res = *this; for (int i = 0; i < res.size(); i++) { for (int j = 0; j < res[0].size(); j++) { res[i][j] *= c; } } return res; } vector& operator[](int n) { return value[n]; } size_t size() { return value.size(); } Matrix operator^(long long n) { Matrix a = *this; Matrix res(a.size(), a.size(), init); for (int i = 0; i < a.size(); i++) { res[i][i] = 1; } while (n > 0) { if (n & 1) res = res * a; a = a * a; n >>= 1; } return res; } }; int N; int Px; int Py; signed main(){ cin >> N >> Px >> Py; Matrix base(3,3,0); base[0][0] = base[1][1] = base[2][2] = 1; vector> m(N + 1,base); rep(i,0,N - 1){ int c; int d; cin >> c; if(c == 1){ cin >> d; m[i][0][2] = d; } if(c == 2){ cin >> d; m[i][1][2] = d; } if(c == 3){ m[i][0][0] = m[i][1][1] = 0; m[i][0][1] = 1; m[i][1][0] = -1; } } for(int i = N - 1;i >= 0;i--){ m[i] = m[i + 1] * m[i]; } Matrix res(3,1,0); res[0][0] = Px; res[1][0] = Py; res[2][0] = 1; rep(i,0,N - 1){ auto a = m[i] * res; cout << a[0][0] << " " << a[1][0] << endl; } }