#include<bits/stdc++.h>
using namespace std;
const int N=1010,T=510;
const int dx[8]={0,0,-1,1,1,-1,1,-1};
const int dy[8]={1,-1,0,0,-1,1,1,-1};
bool vis[N][N],can[N][N],col[N][N],inc[N][N];
int a,b,c,TT,K,res,cnt,sum,p[N][2];
#define ull unsigned long long 
unordered_map<ull,int>mp;
void dfs(int x,int y,int tot)
{
	if(tot>res)
	{
		ull h=0;
		for(int i=-2*a+1;i<=2*a-1;i++)
		{
		    for(int j=max(-2*b+1,-2*c+1-i);j<=min(2*b-1,2*c-1-i);j++) h=h*2+col[i+T][j+T];
		}
		mp[h]=++sum;
		res=tot,cnt=1;
	}
	else if(tot==res)
	{
		ull h=0;
		for(int i=-2*a+1;i<=2*a-1;i++)
		{
		    for(int j=max(-2*b+1,-2*c+1-i);j<=min(2*b-1,2*c-1-i);j++) h=h*2+col[i+T][j+T];
		}
		if(!mp.count(h)) mp[h]=++sum,cnt++;
	}
	if(!can[x][y]) return ;
	bool ok=true;
	for(int k=0;k<6;k++)
	{
		int x1=x+dx[k],y1=y+dy[k];
		if(can[x1][y1]&&col[x1][y1]) {ok=false;break;}
	}
	vis[x][y]=true;
	for(int k=0;k<8;k++)
	{
		int x1=x+dx[k],y1=y+dy[k];if(vis[x1][y1]) continue;
		if(ok){col[x][y]=true;dfs(x1,y1,tot+1);col[x][y]=false;}
		dfs(x1,y1,tot);
	}
	vis[x][y]=false;
}
/*void dfs(int now,int tot)
{
	if(now>K)
	{
		if(tot>res) res=tot,cnt=1;
		else if(tot==res) cnt++;
	}
	int x=p[now][0],y=p[now][1];
	bool ok=true;
	for(int k=0;k<6;k++)
	{
		int x1=x+dx[k],y1=y+dy[k];
		if(col[x1][y1]) {ok=false;break;}
	}
	if(ok) col[x][y]=true,dfs(now+1,tot+1),col[x][y]=false;
	dfs(now+1,tot);
}*/
int main()
{
	freopen("geometry.in","r",stdin);
	freopen("geometry.out","w",stdout);
	scanf("%d",&TT);
	while(TT--)
	{
		scanf("%d%d%d",&a,&b,&c);memset(can,0,sizeof(can));res=cnt=0;mp.clear();K=0;
		for(int i=-2*a+1;i<=2*a-1;i++)
		    for(int j=max(-2*b+1,-2*c+1-i);j<=min(2*b-1,2*c-1-i);j++)
		        {
		        	if((abs(i)%2==0)&&(abs(j)%2==0)) continue;can[i+T][j+T]=true;K++;
		        	p[K][0]=i+T,p[K][1]=j+T;
				}
		dfs(T,1+T,0);
		printf("%d %d\n",res,cnt);
	}
	return 0;
}