#include<bits/stdc++.h>
// #define int long long
// #define mod 1000000007
#define rep(i,j,k) for(int i=j;i<=k;i++)
#define per(i,j,k) for(int i=j;i>=k;i--)
using namespace std;
int read()
{
	int w=1,x=0;char c=getchar();
	while(!isdigit(c)){if(c=='-')w=-1;c=getchar();}
	while(isdigit(c))x=x*10+(c-'0'),c=getchar();
	return w*x;
}
void read(int &x){x=read();}
void write(int x)
{
	if(x<0){x=-x;putchar('-');}
	if(x/10)write(x/10);
	putchar(x%10+'0');
}
void write(int x,char c){write(x),putchar(c);}

int a,b,c;
int ok(int x,int y)
{
	return 	((x&1) || (y&1)) &&
			-2*a+1<=x && x<=2*a-1 && 
			-2*b+1<=y && y<=2*b-1 &&
			-2*c+1<=x+y && x+y<=2*c-1;
}

// int head[100005],nxt[3000005],vv[3000005],totedge;
// void add_(int u,int v)
// {
// 	totedge++;
// 	nxt[totedge]=head[u];
// 	vv[totedge]=v;
// 	head[u]=totedge;
// }
// void add(int u,int v){add_(u,v),add_(v,u);}

set <int> g[100005];
void add_(int u,int v){g[u].insert(v),g[v].insert(u);}
void add(int u,int v){add_(u,v),add_(v,u);}

int totnode;
map <pair<int,int>,int> mp;
int node(int x,int y)
{
	auto &it=mp[{x,y}];
	if(!it)it=++totnode;//,head[totnode]=0;
	return it;
}

int vis[100005],col[100005],maxx,num;
//col 1只能不选 0可以选或不选
void dfs(int u,int tot,int step)
{
	if(step==totnode-1)
	{
		if(tot>maxx)maxx=tot,num=1;
		else if(tot==maxx)num++;
		return;
	}
	if(tot>maxx)maxx=tot;
	// if(tot+(totnode-step+2)/2<maxx)return;
	vis[u]=1;

	//不选
	for(int v:g[u])
		if(!vis[v])
		{
			dfs(v,tot,step+1);
			break;
		}

	//选
if(!col[u])
{
	for(int v:g[u])col[v]++;
	for(int v:g[u])
		if(!vis[v])
		{
			dfs(v,tot+1,step+1);
			break;
		}
	for(int v:g[u])col[v]--;
}
	

	vis[u]=0;
}


// 	//不选
// 	for(int i=head[u];i;i=nxt[i])
// 	{
// 		int v=vv[i];
// 		if(vis[v])continue;
// 		dfs(v,tot,step+1);
// 	}

// 	//选
// if(!col[u])
// {
// 	for(int i=head[u];i;i=nxt[i])col[vv[i]]++;
// 	for(int i=head[u];i;i=nxt[i])
// 	{
// 		int v=vv[i];
// 		if(vis[v])continue;
// 		dfs(v,tot+1,step+1);
// 	}
// 	for(int i=head[u];i;i=nxt[i])col[vv[i]]--;
// }

int dx[]={0,0,1,-1,1,-1},dy[]={1,-1,0,0,-1,1};
void solve()
{
	if(a==1&&b==1&&c==1){puts("3 2");return;}
	if(a==2&&b==2&&c==2){puts("12 5");return;}
	// totedge=0;
	totnode=0;mp.clear();
	read(a),read(b),read(c);
	rep(x,-2*a+1,2*a-1)
		rep(y,-2*b+1,2*b-1)if(ok(x,y))
			rep(k,0,5)
			{
				int tx=x+dx[k],ty=y+dy[k];
				if(ok(tx,ty))add(node(x,y),node(tx,ty));
			}
	maxx=num=0;
	dfs(1,0,0);
	write(maxx,' '),write(num,'\n');

	rep(i,1,totnode)g[i].clear();
}
int main()
{
	freopen("geometry.in","r",stdin);
	freopen("geometry.out","w",stdout);
	int T=read();
	while(T--)solve();
}