#include<bits/stdc++.h>
using namespace std;
std::mt19937 rnd(121);

int main() {
    for(int i = 1; i <= 20; ++i) {
        ofstream OUT(to_string(i)+".in");
        int n = 1000000/20*i;
        OUT << n << "\n";
        if(i != 4 && i != 5 && i != 16 && i != 17 && i != 13) {
            vector<int> a(n), c;
            for(int i = 0; i < n; ++i) a[i] = i + 1;
            shuffle(a.begin(), a.end(), rnd);
            for(int i = 1; i <= n; ++i) {
                if(lower_bound(c.begin(), c.end(), a[i-1]) == c.end()) {
                    OUT << c.size() + 1 << " ";
                    c.push_back(a[i-1]);
                } else {
                    int tmp = lower_bound(c.begin(), c.end(), a[i-1]) - c.begin() + 1;
                    c[tmp - 1] = a[i-1];
                    OUT << tmp << " ";
                }
            }
            OUT << endl;
            OUT.close();
        }
        else {
            if(i == 4) {
                vector<int> a(n);
                for(int i = 0; i < n; ++i) a[i] = i + 1;
                shuffle(a.begin(), a.end(), rnd);
                for(auto x : a) OUT << x << " ";
                OUT << endl;
                OUT.close();
            }
            else {
                int now = 0;
                vector<int> a;
                for(int i = 1; i <= n; ++i) {
                    int len = rnd() % (n/500) + 1;
                    len = min(len, n - now);
                    for(int j = 1; j <= len; ++j) a.push_back(i);
                    now += len;
                    if(now == n) break;
                }
                shuffle(a.begin(), a.end(), rnd);
                for(auto x : a) OUT << x << " ";
                OUT << endl;
                OUT.close();
            }
        }
    }
    return 0;
}