#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
using namespace std;
const int INF=0x3f3f3f3f;
const int MAXN=(1<<15)+5;
const int MOD=1e9+7;
int dead[20],cost[20];
int dp[MAXN],t[MAXN];
char s[20][105];
int pre[MAXN];
void print(int x)
{
if(x==0)
return;
print(x^(1<<pre[x]));
printf("%s\n",s[pre[x]] );
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(pre,0,sizeof pre);
int n;
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%s%d%d",s[i],&dead[i],&cost[i] );
for(int i=1; i<(1<<n); i++)
{
dp[i]=INF;
for(int j=n-1; j>=0; j--)
{
int tmp=1<<j;
//如果没有做
if(! (i&tmp) )
continue;
//做这个题之后的分数+花费-期限=扣得分
int score=t[i^tmp]+cost[j]-dead[j];
//如果小于,说明不扣分
if(score<0)
score=0;
//如果当前的状态扣的分数 > 做这个题之后扣的分
if(dp[i]>dp[i^tmp]+score)
{
//分数
dp[i]=dp[i^tmp]+score;
//花的时间
t[i]=t[i^tmp]+cost[j];
//转移状态,这个状态下做的题
pre[i]=j;
}
}
}
printf("%d\n", dp[(1<<n)-1]);
print((1<<n)-1);
}
return 0;
}