#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN=2e5+10;
struct node{
int ans1,ans2;
node(){}
node(int a1,int a2){
ans1=a1,ans2=a2;
}
};
int a[MAXN];
bool pr[MAXN],vis[MAXN];
vector<node> ans;
int main()
{
for(int i=2;i<MAXN;i++)
if(!pr[i]) for(int j=i*2;j<MAXN;j+=i) pr[j]=1;
int t,n,num;
for(scanf("%d",&t);t--;){
scanf("%d",&n);memset(vis,0,sizeof(vis));ans.clear();
for(int i=n;i>=2;i--){
if(pr[i]) continue;num=0;
for(int j=i;j<=n;j+=i) if(!vis[j]) a[++num]=j;
if(num<=1) continue;
if(num&1){
ans.push_back(node(a[1],a[3]));
vis[a[1]]=vis[a[3]]=1;
for(int j=4;j<=num;j+=2) ans.push_back(node(a[j],a[j+1])),
vis[a[j]]=vis[a[j+1]]=1;
}
else for(int j=1;j<=num;j+=2) ans.push_back(node(a[j],a[j+1])),
vis[a[j]]=vis[a[j+1]]=1;
}
printf("%d\n",ans.size());
for(int i=0;i<ans.size();i++) printf("%d %d\n",ans[i].ans1,ans[i].ans2);
}
}