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