#include<bits/stdc++.h>
using namespace std;
#define N 10000000
#define Mod 998244353
#define Max(x,y)((x)>(y)?x:y)
#define For(i,x,y)for(i=x;i<=(y);i++)
#define Down(i,x,y)for(i=x;i>=(y);i--)
bool bo[N];
vector<int>vec;
pair<int,int>g[N],f[N];
vector<int>vecc[100000];
int main()
{
	freopen("geometry.in","r",stdin);
	freopen("geometry.out","w",stdout);
	int T,a,b,c,stat,i,j,k,n,num,pos,mx,tot=0;
	cin>>T;
	while(T--)
	{
		cin>>a>>b>>c;
		n=(a<<2)-1;
		vec.clear();
		For(stat,0,(1<<n)-1)
		if(stat&stat<<1||stat&stat>>1)continue;
		else vec.push_back(stat);
//		for(auto stat:vec)
//		{
//			for(auto k:vec)
//			if(stat&k||stat&k>>1)continue;
//			else vecc[stat].push_back(k);
//			cout<<vecc[stat].size()<<' '<<vec.size()<<endl;
//		}
		For(stat,0,(1<<n)-1)
		{
			g[stat]=make_pair(0,0);
			For(i,1,n)
			if(!(i&1)&&stat&1<<(i-1))break;
			bo[stat]=i<=n;
		}
		g[0].second=1;
		Down(j,(b<<1)-1,1-(b<<1))
		{
			for(auto stat:vec)
			{
				For(i,1-(a<<1),(a<<1)-1)
				if(i+j+1<1-(c<<1)||i+j+1>(c<<1)-1)
				{
					pos=i-1+(a<<1);
					if(stat&1<<pos)break;
				}
				if(i<a<<1)continue;
				for(auto k:vec)
				if(stat&k||stat&k>>1||!(j&1)&&bo[k])continue;
				else
				{
					For(i,1-(a<<1),(a<<1)-1)
					if(i+j<1-(c<<1)||i+j>(c<<1)-1)
					{
						pos=i-1+(a<<1);
						if(k&1<<pos)break;
					}
					if(i<a<<1)continue;
					num=__builtin_popcount(k);
					if(g[stat].first+num>f[k].first)f[k].first=g[stat].first+num,f[k].second=g[stat].second;
					else if(g[stat].first+num==f[k].first)f[k].second=(f[k].second+g[stat].second)%Mod;
				}
			}
			For(stat,0,(1<<n)-1)g[stat]=f[stat],f[stat]=make_pair(0,0);
		}
		mx=num=0;
		For(stat,0,(1<<n)-1)mx=Max(mx,g[stat].first);
		cout<<mx<<' ';
		For(stat,0,(1<<n)-1)num=(num+(g[stat].first==mx?g[stat].second:0))%Mod;
		cout<<num<<endl;
//		For(stat,0,(1<<n)-1)
//		if(f[stat].first==mx)cout<<stat<<' '<<f[stat].second<<endl;
	}
	return 0;
}
