#include #define mp make_pair #define pb push_back #define st first #define nd second #define ll long long int #define vi vector const int mod=1000000007; using namespace std; int n,k,m; int T[100005][3],A[19][19][19],B[19][19][19],P[4][19]; int S[19]; struct triple { int a,b,c; }; vector M; vi W; bool operator<(triple a,triple b) { if(a.a!=b.a) return a.a>n>>k>>m; for(int i=1; i<=n; i++) { T[i][1]=-1; T[i][2]=-1; } for(int i=1; i<=m; i++) { int a,b,c; cin>>a>>b>>c; a++; b++; T[a][b]=c; } for(int i=0; i<=9; i++) for(int j=0; j<=9; j++) S[i+j]++; funkcja(1,0); sort(M.begin(),M.end()); M.resize(unique(M.begin(),M.end())-M.begin()); for(int i=4; i<=n; i++) { for(auto v:M) { int a=v.a,b=v.b,c=v.c; int ile=0; if(T[i][1]!=-1&&T[i][2]!=-1) { if(T[i][1]+T[i][2]==c) ile=1; } else if(T[i][1]!=-1||T[i][2]!=-1) { int x=max(T[i][1],T[i][2]); if(c-x>=0&&c-x<=9) ile=1; } else ile=S[c]; B[a][b][c]=((ll)A[c][a][b]*ile)%mod; } for(auto v:M) { int a=v.a,b=v.b,c=v.c; A[a][b][c]=B[a][b][c]; B[a][b][c]=0; } } ll wynik=0; for(auto v:M) { int a=v.a,b=v.b,c=v.c; wynik+=A[a][b][c]; wynik%=mod; } cout<