#include <bits/stdc++.h>
using namespace std;
using ll = long long;
deque<pair<int, int>> snake;
bool moveSnake(int dir) {
// TODO: 请实现移动逻辑
if(snake.empty()){return true;}
int n = snake.size();
//先记住蛇头的位置
pair<int, int>p = snake.at(n - 1);
//改变蛇头的位置
if (dir == 1) {
snake.at(n - 1).second += 1;
} else if (dir == 2) {
snake.at(n - 1).second -= 1;
} else if (dir == 3) {
snake.at(n - 1).first -= 1;
} else if (dir == 4) {
snake.at(n - 1).first += 1;
}
for (int i = n - 2; i >= 0; --i) {
pair<int, int>p_ = snake.at(i);
snake.at(i) = p;
p = p_;
}
for (int i = n - 2; i >= 0; --i) {
if (snake.at(n - 1) == snake.at(i)) {
return true;
}
}
return false;
}
bool eatSnake(int dir) {
// TODO: 请实现吃果子生长逻辑
pair<int, int>p = snake.front();
moveSnake(dir);
snake.push_front(p);
int n = snake.size();
for (int i = n - 2; i >= 0; --i) {
if (snake.at(n - 1) == snake.at(i)) {
return true;
}
}
return false;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, q;
cin >> n >> q;
snake.clear();
for (int i = 0; i < n; i++) {
int x, y;
cin >> x >> y;
snake.emplace_back(x, y);
}
for (int i = 0; i < q; i++) {
int op, dir;
cin >> op >> dir;
bool collision = (op == 1 ? moveSnake(dir) : eatSnake(dir));
if (collision) {
cout << -1 << '\n';
return 0;
} else {
for (auto it = snake.rbegin(); it != snake.rend(); ++it) {
cout << it->first << ' ' << it->second << '\n';
}
}
}
return 0;
}