显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int INF=998244353;
long long f[100010];
int a[100010],b[100010],c[100010];
/*struct Point
{
int a,b,c;
bool ab,bc,ac;
}S[200000];*/
int main()
{
freopen("tria.in","r",stdin);
freopen("tria.out","w",stdout);
int n,m;
long long sum=1,ans;
scanf("%d%d",&n,&m);
if(n<3)
{
a1:printf("0");
return 0;
}
else
{
f[1]=1;
if(m==0)
{
for(int i=2;i<=n-2;i++)
{
sum+=i;
sum=sum%INF;
f[i]=(f[i-1]+sum)%INF;
}
printf("%d",(f[n-2]*4)%INF);
return 0;
}
else
{
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&a[i],&b[i],&c[i]);
}
for(int i=2;i<=n-2;i++)
{
sum+=i;
sum=sum%INF;
f[i]=(f[i-1]+sum)%INF;
}
ans=f[n-2];
for(int i=1;i<=m;i++)
{
if(a[i]==0)
{
ans=(ans-(n-c[i]))%INF;
}
}
if(ans<0)
{
goto a1;
}
printf("%lld",ans);
return 0;
}
}
return 0;
}