#ifdef DEBUG
#  define _GLIBCXX_DEBUG
#endif
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include "testlib.h"
#define ff first
#define ss second
#define szof(x) ((int)x.size())
#ifndef LOCAL
#  define cerr __get_ce
#endif

using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef unsigned long long ull;

using namespace __gnu_pbds;
template <typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
template <typename K, typename V> using ordered_map = tree<K, V, less<K>, rb_tree_tag, tree_order_statistics_node_update>;

int const INF = (int)1e9 + 1e3;
ll const INFL = (ll)1e18 + 1e6;

int main(int argc, char* argv[]) {
  registerGen(argc, argv, 1);

  int t = opt<int>("t");
  int minn = opt<int>("minn");
  int maxn = opt<int>("maxn");
  int mina = opt<int>("mina");
  int maxa = opt<int>("maxa");
  int minb = opt<int>("minb");
  int maxb = opt<int>("maxb");

  auto ns = rnd.partition(t, maxn, minn);
    
  cout << t << '\n';
  for (int q = 0; q < t; q++) {
    int n = ns[q];
    cout << n << " " << maxa << " " << maxb << '\n';
    set<pair<int, int>> s;
    for (int i = 0; i < n; i++) {
      int a, b;
      do {
        a = rnd.next(mina, maxa);
        b = rnd.next(minb, maxb);
      } while (s.find({a, b}) != s.end());
      cout << a << " " << b << '\n';
      s.emplace(a, b);
    }
  }

  return 0;
}