#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 5e5;
int n, spf[N+1], f[N+1];
void precompute() {
for (int i = 2; i <= N; i++)
if (spf[i] == 0)
for (int j = i; j <= N; j += i)
if (spf[j] == 0) spf[j] = i;
f[1] = 1;
for (int i = 2; i <= N; i++)
f[i] = f[i / spf[i]] + 1;
}
void solve() {
cin >> n;
int k = 0;
for (int i = 1; i <= n; i++)
k = max(k, f[i]);
cout << k << '\n';
for (int i = 1; i <= n; i++)
cout << f[i] << ' ';
cout << '\n';
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
precompute();
int tests = 1; cin >> tests;
while (tests--) solve();
#ifndef ONLINE_JUDGE
cerr << "\nTime elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVzaW5nIGxsID0gbG9uZyBsb25nOwoKY29uc3QgaW50IE4gPSA1ZTU7CgppbnQgbiwgc3BmW04rMV0sIGZbTisxXTsKCnZvaWQgcHJlY29tcHV0ZSgpIHsKICAgIGZvciAoaW50IGkgPSAyOyBpIDw9IE47IGkrKykKICAgICAgICBpZiAoc3BmW2ldID09IDApCiAgICAgICAgICAgIGZvciAoaW50IGogPSBpOyBqIDw9IE47IGogKz0gaSkKICAgICAgICAgICAgICAgIGlmIChzcGZbal0gPT0gMCkgc3BmW2pdID0gaTsKICAgIGZbMV0gPSAxOwogICAgZm9yIChpbnQgaSA9IDI7IGkgPD0gTjsgaSsrKQogICAgICAgIGZbaV0gPSBmW2kgLyBzcGZbaV1dICsgMTsKfQoKdm9pZCBzb2x2ZSgpIHsKICAgIGNpbiA+PiBuOwogICAgaW50IGsgPSAwOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgICAgIGsgPSBtYXgoaywgZltpXSk7CiAgICBjb3V0IDw8IGsgPDwgJ1xuJzsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgICAgICBjb3V0IDw8IGZbaV0gPDwgJyAnOwogICAgY291dCA8PCAnXG4nOwp9CgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKE5VTEwpOwoKICAgIHByZWNvbXB1dGUoKTsKCiAgICBpbnQgdGVzdHMgPSAxOyBjaW4gPj4gdGVzdHM7CiAgICB3aGlsZSAodGVzdHMtLSkgc29sdmUoKTsKCiAgICAjaWZuZGVmIE9OTElORV9KVURHRQogICAgY2VyciA8PCAiXG5UaW1lIGVsYXBzZWQ6ICIgPDwgMS4wICogY2xvY2soKSAvIENMT0NLU19QRVJfU0VDIDw8ICIgcy5cbiI7CiAgICAjZW5kaWYKCiAgICByZXR1cm4gMDsKfQo=