This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
int id, X1, X2, Y1, Y2;
int nowx, nowy;
vector <pair <int, int>> points, require;
vector <vector <pair <int, int>>> shapes;
vector <int> idlist;
void scissors(int idA, vector <vector <pair <int, int>>> remains) {
    cout << "scissors\n";
    cout << idA << ' ' << remains.size() << '\n';
    shapes.pop_back();
    idlist.pop_back();
    nowx = 0;
    nowy = 0;
    for(auto shape : remains) {
        cout << shape.size() << ' ';
        for(auto [x, y] : shape) {
            cout << x << ' ' << y << ' ';
        }
        cout << '\n';
        for(auto &[x, y] : shape) {
            x -= nowx;
            y += nowy;
        }
        idlist.push_back(++id);
        shapes.push_back(shape);
        nowx += X2;
        nowy += Y1;
    }
}
void tape() {
    cout << "tape\n";
    cout << shapes.size() << ' ';
    for(auto i : idlist) {
        cout << i << ' ';
    }
    cout << '\n';
    for(auto shape : shapes) {
        cout << shape.size() << ' ';
        for(auto [x, y] : shape) {
            cout << x << ' ' << y << ' ';
        }
        cout << '\n';
    }
    cout << require.size() << ' ';
    for(auto [x, y] : require) {
        cout << x << ' ' << y << ' ';
    }
}
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int N;
    cin >> N;
    while(N--) {
        int x, y;
        cin >> x >> y;
        points.emplace_back(x, y);
    }
    tie(X1, Y1) = points[2];
    idlist.push_back(id);
    shapes.push_back(points);
    cin >> N;
    while(N--) {
        int x, y;
        cin >> x >> y;
        require.emplace_back(x, y);
    }
    tie(X2, Y2) = require[2];
    vector <vector <pair <int, int>>> remains;
    remains.push_back({{0, 0}, {X2, 0}, {X2, Y1}, {0, Y1}});
    nowx = X2;
    while(X1 - X2 > X2) {
        remains.push_back({{nowx, 0}, {nowx + X2, 0}, {nowx + X2, Y1}, {nowx, Y1}});
        nowx += X2;
        X1 -= X2;
    }
    int D = X2 / (X1 - X2);
    assert(X2 % (X1 - X2) == 0);
    if(remains.size() > 1) {
        scissors(id, remains);
        tape();
    }
    return 0;
}
Compilation message (stderr)
scissors.cpp: In function 'int main()':
scissors.cpp:93:9: warning: unused variable 'D' [-Wunused-variable]
   93 |     int D = X2 / (X1 - X2);
      |         ^| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |