#include using namespace std; const int MAXN = 100100; vector edges[MAXN]; bool bio[MAXN]; int mat[300][300]; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); freopen("puzzle.in", "r", stdin); freopen("puzzle.out", "w", stdout); long long k, p; int i, j; int a, b; int n, m; cin>>k>>p; n = (2 * k - p - sqrt(-4 * k + 4 * k * k - 4 * k * p + p * p)) / 2; m = (2 * k - p + sqrt(-4 * k + 4 * k * k - 4 * k * p + p * p)) / 2; cout<>a>>b; --a, --b; edges[a].push_back(b); edges[b].push_back(a); } if (n == 1) { cout<> cur, nxt; { i = 0; j = 0; int prv = a, tmp; a = edges[a][0]; while (edges[a].size() == 3) { mat[i][++j] = a + 1; bio[a] = true; cur.push_back({i, j}); for (int x: edges[a]) if (x != prv && edges[x].size() < 4) tmp = x; prv = a; a = tmp; } mat[i][++j] = a + 1; bio[a] = true; tmp = (edges[a][0] == prv ? edges[a][1] : edges[a][0]); prv = a; a = tmp; while (edges[a].size() == 3) { mat[++i][j] = a + 1; bio[a] = true; cur.push_back({i, j}); for (int x: edges[a]) if (x != prv && edges[x].size() < 4) tmp = x; prv = a; a = tmp; } mat[++i][j] = a + 1; bio[a] = true; tmp = (edges[a][0] == prv ? edges[a][1] : edges[a][0]); prv = a; a = tmp; while (edges[a].size() == 3) { mat[i][--j] = a + 1; bio[a] = true; cur.push_back({i, j}); for (int x: edges[a]) if (x != prv && edges[x].size() < 4) tmp = x; prv = a; a = tmp; } mat[i][--j] = a + 1; bio[a] = true; tmp = (edges[a][0] == prv ? edges[a][1] : edges[a][0]); prv = a; a = tmp; while (edges[a].size() == 3) { mat[--i][j] = a + 1; bio[a] = true; cur.push_back({i, j}); for (int x: edges[a]) if (x != prv && edges[x].size() < 4) tmp = x; prv = a; a = tmp; } } // for (i = 0; i < n; ++i) // { // for (j = 0; j < m; ++j) // cout<= 0 && i + ii < n && j + jj >= 0 && j + jj < m && !mat[i + ii][j + jj]) { i += ii; j += jj; goto out; } out: // cout<