#include<bits/stdc++.h>
using namespace std;
int poww(int a,int b)
{
int c=1;
while(b)
{
if(b&1) c=a*c;
a=a*a;b>>=1;
}
return c;
}
int T,n,zs[110],t,ans[2][110][110],A[110];
bool isss[210];
int dfs(int u,int rst)
{
if(ans[0][u][rst]!=-1) return ans[0][u][rst];
if(rst==0||u>t) return ans[0][u][rst]=1;
ans[0][u][rst]=dfs(u+1,rst);
int tmp=1;
for(int i=0;tmp<=rst;i++)
{
int us=tmp*dfs(u+1,rst-tmp);
if(ans[0][u][rst]<us)
{
ans[0][u][rst]=us;
ans[1][u][rst]=i;
}
tmp*=zs[u];
}
return ans[0][u][rst];
}
int main()
{
memset(ans,-1,sizeof ans);
for(int i=2;i<200;i++)
{
if(!isss[i]) zs[++t]=i;
for(int j=1;j<=t;j++)
{
int tmp=zs[j]*i;
if(tmp>=200) break;
isss[tmp]=1;
if(i%zs[j]==0) break;
}
}
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
dfs(1,n);
printf("%d",ans[0][1][n]);
int rst=n,u=1;
multiset<int> st;
for(int i=1;i<=t;i++)
{
if(ans[1][i][rst]==-1) continue;
int us=poww(zs[i],ans[1][i][rst]);
st.insert(us);
rst-=us;
if(rst==0) break;
}
while(rst--) st.insert(1);
while(!st.empty())
{
int nw=*st.begin();
st.erase(st.begin());
for(int i=1;i<nw;i++) printf("% d",u+i);
printf("% d",u);
u+=nw;
}
puts("");
}
}