#include using namespace std; const int V = 449; int main() { #ifdef wxh010910 freopen("input.txt", "r", stdin); #endif vector primes; for (int i = 2; primes.size() <= V; ++i) { bool flag = true; for (int j = 2; j * j <= i; ++j) { if (i % j == 0) { flag = false; break; } } if (flag) { primes.push_back(i); } } vector> used(V, vector(V)); vector> path; vector cur(V); for (int i = 0; i < V; ++i) { used[i][i] = true; } function dfs = [&](int x) { for (int &i = cur[x]; i < V; ++i) { if (!used[x][i]) { int y = i; used[x][y] = used[y][x] = true; dfs(y); path.emplace_back(y, x); } } }; dfs(0); int tt; scanf("%d", &tt); while (tt--) { int n; scanf("%d", &n); int b = 0; while (path[b].first == path[b + n - 3].second) { ++b; } for (int i = 0; i < n - 2; ++i) { printf("%d ", primes[path[i + b].first] * primes[path[i + b].second]); } printf("%d ", primes[path[b + n - 3].second] * primes[V]); printf("%d\n", primes[V] * primes[path[b].first]); } return 0; }