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