#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
inline int read()
{
	char ch=getchar(); int ne=0; while(!isdigit(ch)) {if(ch=='-') ne=1; ch=getchar();}
	int ans=0; while(isdigit(ch)) ans=ans*10+ch-'0',ch=getchar();
	if(ne) return -ans;
	else return ans;
}
#define mod 998244353
inline int add(int x,int y) {return x+y>=mod?x+y-mod:x+y;}
inline int sub(int x,int y) {return x-y<0?x-y+mod:x-y;}
inline int mul(int x,int y) {return 1LL*x*y%mod;}
inline int add(int x,int y,int z) {return add(add(x,y),z);}
inline int mul(int x,int y,int z) {return mul(mul(x,y),z);}
int qpow(int x,ll y)
{
	int ans=1;
	while(y)
	{
		if(y&1) ans=mul(ans,x);
		x=mul(x,x),y>>=1;
	}
	return ans;
}
int Inv(int x) {return qpow(x,mod-2);}
int _popcnt[1<<15];
int popcnt(int x) {return _popcnt[x];}
namespace sub1
{
	int pro[1<<15],n;
	int f[1<<15],g[1<<15];
	int tf[1<<15],tg[1<<15];
	int tok[1<<15];
	int a,b,c;
	int isvalid(int x,int y)
	{
		if(x<-2*a+1||x>2*a-1) return 0;
		if(y<-2*b+1||y>2*b-1) return 0;
		if(x+y<-2*c+1||x+y>2*c-1) return 0;
		if(x%2==0&&y%2==0) return 0;
		return 1;
	}
	int chk(int y,int id)
	{
		int x=id-(2*a-1);
		return isvalid(x,y);
	}
	void print(int v,int B)
	{
		for(int i=0;i<B;i++) printf("%d",v>>i&1);
		cout<<'\n';
	}
	void print(int v,int B,string ch)
	{
		for(int i=0;i<B;i++) printf("%d",v>>i&1);
		cout<<ch;
	}
	void Main(int _a,int _b,int _c)
	{
		a=_a,b=_b,c=_c; int tlen=4*a-1; n=0;
		for(int i=0;i<1<<tlen;i++)
		{
			if(i&(i<<1)) continue;
			else pro[n++]=i;
		}
		for(int i=0;i<n;i++)
		{
			int ok=1;
			for(int j=0;j<tlen;j++) if(pro[i]>>j&1) ok&=chk(-2*b+1,j);
			if(ok) f[i]=popcnt(pro[i]),g[i]=1;
			else f[i]=-inf,g[i]=0;
//			if(ok) print(pro[i],tlen);
		}
		for(int i=-2*b+2;i<=2*b-1;i++)
		{
//			cout<<i<<" ----\n";
			for(int j=0;j<n;j++) tf[j]=-inf,tg[j]=0;
			for(int j=0;j<n;j++)
			{
				tok[j]=1;
				for(int k=0;k<tlen;k++) if(pro[j]>>k&1) tok[j]&=chk(i,k);
//				if(tok[j]) print(pro[j],tlen);
			}
			for(int nw=0;nw<n;nw++) if(tok[nw]) for(int las=0;las<n;las++) if(f[las]>=0)
			{
				if(pro[las]&pro[nw]) continue;
				if((pro[las]>>1)&pro[nw]) continue;
//				print(pro[las],tlen,"->"),print(pro[nw],tlen,"\n");
				int tv=f[las]+popcnt(pro[nw]);
				if(tv>tf[nw]) tf[nw]=tv,tg[nw]=0;
				if(tv==tf[nw]) tg[nw]=add(tg[nw],g[las]);
			}
			for(int j=0;j<n;j++) f[j]=tf[j],g[j]=tg[j];
		}
		int ans=-inf,cnt=0;
		for(int i=0;i<n;i++)
		{
//			if(f[i]==10) print(pro[i],tlen);
			if(f[i]>ans) ans=f[i],cnt=0;
			if(f[i]==ans) cnt=add(cnt,g[i]);
		}
		printf("%d %d\n",ans,cnt);
	}
};
void work()
{
	int a,b,c; cin>>a>>b>>c;
	if(a<=4) sub1::Main(a,b,c);
	else
	{
		
	}
}
signed main()
{
	freopen("geometry.in","r",stdin);
	freopen("geometry.out","w",stdout);
	for(int i=1;i<1<<15;i++) _popcnt[i]=__builtin_popcount(i);
	int T=read(); while(T--) work();
	return 0;
}

