#include<bits/stdc++.h>
using namespace std;
#define N 40000
#define mod 998244353
#define pii pair<int,int>
#define fi first
#define se second
int t,a,b,c,n;
pii ans,g[N],f[N];
vector<int>v0,v[N];
int main(){
	freopen("geometry.in","r",stdin);
	freopen("geometry.out","w",stdout);
	scanf("%d",&t);
	while (t--){
		scanf("%d%d%d",&a,&b,&c);
		a<<=1,b<<=1,c<<=1;
		n=(a<<1)-1,v0.clear();
		for(int S=0;S<(1<<n);S++)
			if ((S&(S>>1))==0)v0.push_back(S);
		for(int S=0;S<(1<<n);S++){
			v[S].clear();
			for(int SS:v0)
				if ((SS&S)==SS)v[S].push_back(SS);
		}
		memset(f,0,sizeof(f));
		f[0].se=1;
		for(int i=-(b-1);i<b;i++){
			int S0=0;
			for(int j=max(-a,-c-i)+1;j<min(a,c-i);j++)
				if ((i&1)||(j&1))S0|=(1<<j+a-1);
			for(int S:v0)g[S]=f[S],f[S]=make_pair(0,0);
			for(int S:v0){
				if (!g[S].se)continue;
				int S1=(S0^(S0&(S|(S>>1))));
				for(int SS:v[S1]){
					g[S].fi+=__builtin_popcount(SS);
					if (f[SS].fi<g[S].fi)f[SS]=g[S];
					else{
						if (f[SS].fi==g[S].fi)f[SS].se=(f[SS].se+g[S].se)%mod;
					}
					g[S].fi-=__builtin_popcount(SS);
				}
			}
		}
		ans=make_pair(0,0);
		for(int S:v0){
			if (!f[S].se)continue;
			if (ans.fi<f[S].fi)ans=f[S];
			else{
				if (ans.fi==f[S].fi)ans.se=(ans.se+f[S].se)%mod;
			}
		}
		printf("%d %d\n",ans.fi,ans.se);
	}
	return 0;
}
