#include<iostream> #include<cstdio> using namespace std; typedef long long ll; const int MOD = 1e9 + 7;
int n, m, t, a[305][305];
int qmi(int a, int b) { int res = 1; while (b) { if (b & 1) res = (ll)res * a % MOD; a = (ll)a * a % MOD; b >>= 1; } return res; }
int work() { int res = 1, w = 1; for (int i = 1; i < n; i++) { for (int j = i + 1; j < n; j++) { if (a[j][i] && !a[i][i]) { swap(a[i], a[j]), w = -w; break; } } int inv = qmi(a[i][i], MOD - 2); for (int j = i + 1; j < n; j++) { int temp = (ll)a[j][i] * inv % MOD; for (int k = i; k < n; k++) a[j][k] = (a[j][k] - (ll)temp * a[i][k] % MOD) % MOD; } } for (int i = 1; i < n; i++) res = (ll)res * a[i][i] % MOD; res *= w; return (res % MOD + MOD) % MOD; }
int main() { scanf("%d%d%d", &n, &m, &t); for (int i = 1; i <= m; i++) { int u, v, w; scanf("%d%d%d", &u, &v, &w); u--, v--; if (t == 0) { a[u][u] = (a[u][u] + w) % MOD; a[v][v] = (a[v][v] + w) % MOD; a[u][v] = (a[u][v] - w) % MOD; a[v][u] = (a[v][u] - w) % MOD; } else { a[v][v] = (a[v][v] + w) % MOD; a[u][v] = (a[u][v] - w) % MOD; } } int ans = work(); printf("%d", ans); return 0; }