HDU6578
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define Mod 998244353
#define LL long long
using namespace std;
const int N=105;
int n,m;
LL f[2][N][N][N],res;
int read()
{
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
struct Node{int l,r,x;}c[105];
bool cmp(Node o1,Node o2){return o1.r<o2.r;}
int main()
{
int T=read();
while(T--)
{
memset(f,0,sizeof(f));
n=read(),m=read(),res=0;
for(int i=1;i<=m;i++)c[i].l=read(),c[i].r=read(),c[i].x=read();
sort(c+1,c+1+m,cmp);
f[0][0][0][0]=1;
int p=1,r=0;
for(int i=0;i<=n;i++,r^=1)
{
for(int j=0;j<=i;j++)
for(int k=0;k<=j;k++)
for(int l=0;l<=k;l++)
{
int t=p;
while(t<=m&&c[t].r==i)
{
int num=(j>=c[t].l)+(k>=c[t].l)+(l>=c[t].l)+1;
if(num!=c[t].x)f[r][j][k][l]=0;
t++;
}
}
while(p<=m&&c[p].r<=i)p++;
for(int j=0;j<=i;j++)
for(int k=0;k<=j;k++)
for(int l=0;l<=k;l++)
{
f[r^1][i][j][k]=(f[r^1][i][j][k]+f[r][j][k][l])%Mod;
f[r^1][j][k][l]=(f[r^1][j][k][l]+f[r][j][k][l])%Mod;
f[r^1][i][k][l]=(f[r^1][i][k][l]+f[r][j][k][l])%Mod;
f[r^1][i][j][l]=(f[r^1][i][j][l]+f[r][j][k][l])%Mod;
}
for(int j=0;j<=i;j++)
for(int k=0;k<=j;k++)
for(int l=0;l<=k;l++)
{
if(i==n)res=(res+f[r][j][k][l])%Mod;
f[r][j][k][l]=0;
}
}
printf("%lld\n",res%Mod);
}
return 0;
}