#include <bits/stdc++.h>
#include <cstddef>
using namespace std;
using ll = long long;
deque<pair<int,int>> snake;
pair<int,int> getNextHead(int dir){
pair<int,int> head = snake.back();
int nx = head.first;
int ny = head.second;
if(dir == 1) ny++;
else if(dir == 2)ny--;
else if(dir == 3)nx--;
else if(dir == 4)nx++;
return {nx,ny};
}
bool moveSnake(int dir) {
// TODO: 请实现移动逻辑
///size()-1是头,移动时尾巴消失了,不用遍历它
pair<int,int> nextHead = getNextHead(dir);
for(size_t i = 1;i < snake.size();++i)
{
if(snake[i] == nextHead)
return true;
}
snake.push_back(nextHead);//加头
snake.pop_front();//去尾
return false;
}
bool eatSnake(int dir) {
// TODO: 请实现吃果子生长逻辑
pair<int,int> nextHead = getNextHead(dir);
for(const auto& part: snake)
{
if(part == nextHead)
return true;
}
snake.push_back(nextHead);//只加头
return false;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, q;
if (!(cin >> n >> q)) return 0; // 防止读取错误
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 { // 从蛇头(back)到蛇尾(front)输出
for (auto it = snake.rbegin(); it != snake.rend(); ++it) {
cout << it->first << ' ' << it->second << '\n';
}
}
}
return 0;
}