#include <bits/stdc++.h>
using namespace std;
using ll = long long;
deque<pair<int,int>> snake;
bool moveSnake(int dir) {
// TODO: 请实现移动逻辑
snake.pop_front();
snake.push_back(snake.back());
switch (dir) {
case 1:
snake.back().second+=1;
break;
case 2:
snake.back().second-=1;
break;
case 3:
snake.back().first-=1;
break;
case 4:
snake.back().first+=1;
break;
}
auto it=find(snake.begin(),prev(snake.end()),snake.back());
if(it!=prev(snake.end()))
return true;
return false;
}
bool eatSnake(int dir) {
// TODO: 请实现吃果子生长逻辑
snake.push_back(snake.back());
switch (dir) {
case 1:
snake.back().second+=1;
break;
case 2:
snake.back().second-=1;
break;
case 3:
snake.back().first-=1;
break;
case 4:
snake.back().first+=1;
break;
}
auto it=find(snake.begin(),prev(snake.end()),snake.back());
if(it!=prev(snake.end()))
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;
}