description: The Hat is a game of speedy explanation/guessing words (similar to Alias). It's fun. Try it! In this problem, we are talking about a variant of the game when the players are sitting at the table and everyone plays individually (i.e. not teams, but individual gamers play).
  
  n people gathered in a room with m tables (n ≥ 2m). They want to play the Hat k times. Thus, k games will be played at each table. Each player will play in k games.
  
  To do this, they are distributed among the tables for each game. During each game, one player plays at exactly one table. A player can play at different tables.
  
  Players want to have the most "fair" schedule of games. For this reason, they are looking for a schedule (table distribution for each game) such that:
  
    * At any table in each game there are either ⌊n/m⌋ people or ⌈n/m⌉ people (that is, either n/m rounded down, or n/m rounded up). Different numbers of people can play different games at the same table.
    * Let's calculate for each player the value b_i — the number of times the i-th player played at a table with ⌈n/m⌉ persons (n/m rounded up). Any two values of b_imust differ by no more than 1. In other words, for any two players i and j, it must be true |b_i - b_j| ≤ 1. 
  
  
  
  For example, if n=5, m=2 and k=2, then at the request of the first item either two players or three players should play at each table. Consider the following schedules:
  
    * First game: 1, 2, 3 are played at the first table, and 4, 5 at the second one. The second game: at the first table they play 5, 1, and at the second — 2, 3, 4. This schedule is not "fair" since b_2=2 (the second player played twice at a big table) and b_5=0 (the fifth player did not play at a big table).
    * First game: 1, 2, 3 are played at the first table, and 4, 5 at the second one. The second game: at the first table they play 4, 5, 2, and at the second one — 1, 3. This schedule is "fair": b=[1,2,1,1,1] (any two values of b_i differ by no more than 1). 
  
  
  
  Find any "fair" game schedule for n people if they play on the m tables of k games.
  
  Input
  
  The first line of the input contains an integer t (1 ≤ t ≤ 10^4) — the number of test cases in the test.
  
  Each test case consists of one line that contains three integers n, m and k (2 ≤ n ≤ 2⋅10^5, 1 ≤ m ≤ ⌊n/2⌋, 1 ≤ k ≤ 10^5) — the number of people, tables and games, respectively.
  
  It is guaranteed that the sum of nk (n multiplied by k) over all test cases does not exceed 2⋅10^5.
  
  Output
  
  For each test case print a required schedule — a sequence of k blocks of m lines. Each block corresponds to one game, a line in a block corresponds to one table. In each line print the number of players at the table and the indices of the players (numbers from 1 to n) who should play at this table.
  
  If there are several required schedules, then output any of them. We can show that a valid solution always exists.
  
  You can output additional blank lines to separate responses to different sets of inputs.
  
  Example
  
  Input
  
  
  3
  5 2 2
  8 3 1
  2 1 3
  
  
  Output
  
  
  3 1 2 3
  2 4 5
  3 4 5 2
  2 1 3
  
  2 6 2
  3 3 5 1
  3 4 7 8
  
  2 2 1
  2 2 1
  2 2 1
solution: #include <bits/stdc++.h>
  #pragma GCC optimize("Ofast")
  using namespace std;
  long long int fac[1000005];
  long long int modularExponentiation(long long int x, long long int n,
                                      long long int M) {
    long long int result = 1;
    while (n > 0) {
      if (n % 2 == 1)
        result = ((result % 998244353ll) * (x % 998244353ll)) % 998244353ll;
      x = ((x % 998244353ll) * (x % 998244353ll)) % 998244353ll;
      n = n / 2;
    }
    return result;
  }
  long long int binaryExponentiation(long long int x, long long int n) {
    long long int result = 1.0;
    while (n > 0) {
      if (n % 2 == 1) result = result * x;
      x = x * x;
      n = n / 2;
    }
    return result;
  }
  long long int pow1(long long int x, long long int y) {
    long long int z = 1;
    while (y--) {
      z = z * x;
    }
    return z;
  }
  bool isprime(long long int n) {
    if (n <= 1) return false;
    if (n <= 3) return true;
    if (n % 2 == 0 || n % 3 == 0) return false;
    for (long long int i = 5; i * i <= n; i = i + 6)
      if (n % i == 0 || n % (i + 2) == 0) return false;
    return true;
  }
  long long int modInverse(long long int n, long long int p) {
    return modularExponentiation(n, p - 2, p);
  }
  long long int nCrModPFermat(long long int n, long long int r, long long int p) {
    if (r == 0) return 1;
    return (fac[n] * modInverse(fac[r], p) % p * modInverse(fac[n - r], p) % p) %
           p;
  }
  long long int check(long long int x, long long int y) {
    long long int z = 1;
    long long int ans = 0;
    while (z < x) {
      ans++;
      z *= y;
    }
    return ans;
  }
  long long int countbits(long long int n) {
    long long int x = 0;
    while (n > 0) {
      x++;
      n = (n & (n - 1));
    }
    return x;
  }
  int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    long long int t, n, m, k;
    cin >> t;
    while (t--) {
      cin >> n >> m >> k;
      long long int r = n % m;
      if (r == 0) {
        long long int x = n / m;
        long long int p = 1;
        for (long long int j1 = 1; j1 <= k; j1++) {
          for (long long int j = 1; j <= m; j++) {
            cout << x << ' ';
            for (long long int z = 1; z <= x; z++) {
              cout << p << ' ';
              p++;
              if (p > n) {
                p = 1;
              }
            }
            cout << "\n";
          }
        }
      } else {
        long long int x = n / m;
        long long int p = 1;
        for (long long int j1 = 1; j1 <= k; j1++) {
          vector<long long int> v[m];
          for (long long int z = 1; z <= r; z++) {
            long long int T = x + 1;
            while (T--) {
              v[z - 1].push_back(p++);
              if (p > n) p = 1;
            }
          }
          long long int p1 = p;
          for (long long int j = r + 1; j <= m; j++) {
            for (long long int z = 1; z <= x; z++) {
              v[j - 1].push_back(p1++);
              if (p1 > n) p1 = 1;
            }
          }
          for (long long int j = 1; j <= m; j++) {
            cout << v[j - 1].size() << ' ';
            for (auto z : v[j - 1]) cout << z << ' ';
            cout << "\n";
          }
        }
      }
      cout << "\n";
    }
  }
  