#include using namespace std; struct item { int a, b, c, d; }; vector solve(int n, int n_orig) { vector a(n); int m = 4 * n; mt19937 rnd; const int pause = 1e6; for (long long it = 0;; it++) { if (it % pause == 0) { rnd.seed(it / pause); } bool ok = 1; int suma = 0, sumb = 0, sumc = 0, sumd = 0; int fails = 0; const int MAX_FAILS = 100; for (int i = 0; i < n; i++) { if (fails >= MAX_FAILS) break; while (1) { if (fails >= MAX_FAILS) break; a[i].b = rnd() % (m - sumb - (n - i - 1)) + 1; a[i].d = rnd() % (m - sumd - (n - i - 1)) + 1; if (i == n - 1) { a[i].b = m - sumb; a[i].d = m - sumd; } a[i].a = rnd() % (1 * a[i].b) + 1; a[i].c = rnd() % (1 * a[i].d) + 1; if (!(a[i].a * a[i].d > a[i].c * a[i].b)) { fails++; continue; } suma += a[i].a; sumb += a[i].b; sumc += a[i].c; sumd += a[i].d; break; } } if (fails >= MAX_FAILS) continue; ok &= suma < sumc; ok &= sumb == m && sumd == m; bool cok = n == n_orig; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (a[i].b + a[j].b == 8 && a[i].d + a[j].d == 8) { cok = 1; } } } ok &= cok; if (ok) { return a; } } } int main() { int n, m; cin >> n >> m; auto a = solve(n % 2 == 0 ? 2 : std::min(n, 5), n); int ci = -1, cj = -1; for (int i = 0; i < (int)a.size(); i++) { for (int j = i + 1; j < (int)a.size(); j++) { if (a[i].b + a[j].b == 8 && a[i].d + a[j].d == 8) { ci = i; cj = j; } } } while (a.size() < n) { assert(ci != -1); a.push_back(a[ci]); a.push_back(a[cj]); } int t = 0; while (t < n && a[t].a <= a[t].c) t++; a[t].b += m - 4 * n; a[t].d += m - 4 * n; int suma = 0, sumb = 0, sumc = 0, sumd = 0; for (int i = 0; i < n; i++) { suma += a[i].a; sumb += a[i].b; sumc += a[i].c; sumd += a[i].d; assert(a[i].a * a[i].d > a[i].b * a[i].c); } assert(suma * sumd < sumb * sumc); assert(sumb == m && sumd == m); for (auto o : a) { cout << o.a << " " << o.b << " " << o.c << " " << o.d << endl; } }