#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; }