#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define eb emplace_back
#define pii pair <int, int>
#define fi first
#define se second
#define all(ac) ac.begin(), ac.end()
#define MASK(x) (1 << x)
#define ub(i, j) ((i >> j) & 1)
const int MOD = 1e9 + 9999;
int mul(int x, int y) {
return 1LL * x * y % MOD;
}
struct DSU {
int n;
vector <int> lab;
DSU(int n): n(n), lab(n + 1, -1) {}
int find(int u) {return lab[u] < 0 ? u : lab[u] = find(lab[u]);}
bool join(int u, int v) {
u = find(u);
v = find(v);
if(u != v) {
if(lab[u] > lab[v]) swap(u, v);
lab[u] += lab[v];
lab[v] = u;
return 1;
}
return 0;
}
};
int n, m, T;
struct Data {
int x, y, w;
Data(int x, int y, int w): x(x), y(y), w(w) {}
};
vector <Data> vt;
map <pii, int> mp;
bool ident() {
vector <int> rv;
for(Data &e : vt) {
rv.eb(e.x);
rv.eb(e.y);
}
sort(all(rv));
rv.erase(unique(all(rv)), rv.end());
for(Data &e : vt) {
e.x = lower_bound(all(rv), e.x) - rv.begin() + 1;
e.y = lower_bound(all(rv), e.y) - rv.begin() + 1;
}
vector <pii> zero, one;
for(Data &e : vt) {
if(e.w) one.eb(make_pair(e.x, e.y));
else zero.eb(make_pair(e.x, e.y));
}
DSU dsu((int) rv.size());
int last[(int) rv.size() + 1];
memset(last, 0, sizeof last);
for(pii &pos : zero) {
if(last[pos.fi])
dsu.join(pos.se, last[pos.fi]);
last[pos.fi] = pos.se;
}
memset(last, 0, sizeof last);
for(pii &pos : one) {
if(last[pos.fi])
dsu.join(last[pos.fi], pos.se);
last[pos.fi] = pos.se;
}
vector <pii> G[(int) rv.size() + 1];
for(pii &pos : zero) {
G[dsu.find(pos.se)].eb(pos.fi, 0);
}
for(pii &pos : one) {
G[dsu.find(pos.se)].eb(pos.fi, 1);
}
for(int i=1;i<= (int) rv.size();i++) {
sort(all(G[i]));
int col = -1, color = -1;
for(pii &v : G[i]) {
if(col != v.fi) {
col = v.fi;
color = v.se;
}
else
if(color != v.se) return 0;
}
}
return 1;
}
int Pow(int a, int b) {
int res = 1;
while(b > 0) {
if(b & 1) res = mul(res, a);
a = mul(a, a), b >>= 1;
}
return res;
}
int32_t main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
#define task "tet"
if(fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
cin >> n >> m >> T;
for(int i=1;i<=T;i++) {
int x, y, w; cin >> x >> y >> w;
pii cur = make_pair(x, y);
if(mp[cur]) {
if(mp[cur] != w + 1) return cout << 0, 0;
}
else {
mp[cur] = w + 1;
vt.eb(x, y, w);
}
}
T = (int) vt.size();
if(!ident()) cout << 0;
else cout << Pow(2, n + m - T - 1);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZWIgZW1wbGFjZV9iYWNrCiNkZWZpbmUgcGlpIHBhaXIgPGludCwgaW50PgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgYWxsKGFjKSBhYy5iZWdpbigpLCBhYy5lbmQoKQojZGVmaW5lIE1BU0soeCkgKDEgPDwgeCkKI2RlZmluZSB1YihpLCBqKSAoKGkgPj4gaikgJiAxKQoKY29uc3QgaW50IE1PRCA9IDFlOSArIDk5OTk7CmludCBtdWwoaW50IHgsIGludCB5KSB7CiAgICByZXR1cm4gMUxMICogeCAqIHkgJSBNT0Q7Cn0KCnN0cnVjdCBEU1UgewogICAgaW50IG47CiAgICB2ZWN0b3IgPGludD4gbGFiOwogICAgCiAgICBEU1UoaW50IG4pOiBuKG4pLCBsYWIobiArIDEsIC0xKSB7fQogICAgCiAgICBpbnQgZmluZChpbnQgdSkge3JldHVybiBsYWJbdV0gPCAwID8gdSA6IGxhYlt1XSA9IGZpbmQobGFiW3VdKTt9CiAgICAKICAgIGJvb2wgam9pbihpbnQgdSwgaW50IHYpIHsKICAgICAgICB1ID0gZmluZCh1KTsKICAgICAgICB2ID0gZmluZCh2KTsKICAgICAgICAKICAgICAgICBpZih1ICE9IHYpIHsKICAgICAgICAgICAgaWYobGFiW3VdID4gbGFiW3ZdKSBzd2FwKHUsIHYpOwogICAgICAgICAgICBsYWJbdV0gKz0gbGFiW3ZdOwogICAgICAgICAgICBsYWJbdl0gPSB1OwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICB9Cn07CgppbnQgbiwgbSwgVDsKCnN0cnVjdCBEYXRhIHsKICAgIGludCB4LCB5LCB3OwogICAgRGF0YShpbnQgeCwgaW50IHksIGludCB3KTogeCh4KSwgeSh5KSwgdyh3KSB7fQp9OwoKdmVjdG9yIDxEYXRhPiB2dDsKbWFwIDxwaWksIGludD4gbXA7Cgpib29sIGlkZW50KCkgewogICAgdmVjdG9yIDxpbnQ+IHJ2OwogICAgZm9yKERhdGEgJmUgOiB2dCkgewogICAgICAgIHJ2LmViKGUueCk7CiAgICAgICAgcnYuZWIoZS55KTsKICAgIH0KICAgIAogICAgc29ydChhbGwocnYpKTsKICAgIHJ2LmVyYXNlKHVuaXF1ZShhbGwocnYpKSwgcnYuZW5kKCkpOwogICAgCiAgICBmb3IoRGF0YSAmZSA6IHZ0KSB7CiAgICAgICAgZS54ID0gbG93ZXJfYm91bmQoYWxsKHJ2KSwgZS54KSAtIHJ2LmJlZ2luKCkgKyAxOwogICAgICAgIGUueSA9IGxvd2VyX2JvdW5kKGFsbChydiksIGUueSkgLSBydi5iZWdpbigpICsgMTsKICAgIH0KICAgIAogICAgdmVjdG9yIDxwaWk+IHplcm8sIG9uZTsKICAgIGZvcihEYXRhICZlIDogdnQpIHsKICAgICAgICBpZihlLncpIG9uZS5lYihtYWtlX3BhaXIoZS54LCBlLnkpKTsKICAgICAgICBlbHNlIHplcm8uZWIobWFrZV9wYWlyKGUueCwgZS55KSk7CiAgICB9CiAgICAKICAgIERTVSBkc3UoKGludCkgcnYuc2l6ZSgpKTsKICAgIGludCBsYXN0WyhpbnQpIHJ2LnNpemUoKSArIDFdOwogICAgbWVtc2V0KGxhc3QsIDAsIHNpemVvZiBsYXN0KTsKICAgIGZvcihwaWkgJnBvcyA6IHplcm8pIHsKICAgICAgICBpZihsYXN0W3Bvcy5maV0pCiAgICAgICAgICAgIGRzdS5qb2luKHBvcy5zZSwgbGFzdFtwb3MuZmldKTsKICAgICAgICBsYXN0W3Bvcy5maV0gPSBwb3Muc2U7CiAgICB9CiAgICAKICAgIG1lbXNldChsYXN0LCAwLCBzaXplb2YgbGFzdCk7CiAgICBmb3IocGlpICZwb3MgOiBvbmUpIHsKICAgICAgICBpZihsYXN0W3Bvcy5maV0pCiAgICAgICAgICAgIGRzdS5qb2luKGxhc3RbcG9zLmZpXSwgcG9zLnNlKTsKICAgICAgICBsYXN0W3Bvcy5maV0gPSBwb3Muc2U7CiAgICB9CiAgICAKICAgIHZlY3RvciA8cGlpPiBHWyhpbnQpIHJ2LnNpemUoKSArIDFdOwogICAgCiAgICAKICAgIGZvcihwaWkgJnBvcyA6IHplcm8pIHsKICAgICAgICBHW2RzdS5maW5kKHBvcy5zZSldLmViKHBvcy5maSwgMCk7CiAgICB9CiAgICAKICAgIGZvcihwaWkgJnBvcyA6IG9uZSkgewogICAgICAgIEdbZHN1LmZpbmQocG9zLnNlKV0uZWIocG9zLmZpLCAxKTsKICAgIH0KICAgIAogICAgZm9yKGludCBpPTE7aTw9IChpbnQpIHJ2LnNpemUoKTtpKyspIHsKICAgICAgICBzb3J0KGFsbChHW2ldKSk7CiAgICAgICAgaW50IGNvbCA9IC0xLCBjb2xvciA9IC0xOwogICAgICAgIGZvcihwaWkgJnYgOiBHW2ldKSB7CiAgICAgICAgICAgIGlmKGNvbCAhPSB2LmZpKSB7CiAgICAgICAgICAgICAgICBjb2wgPSB2LmZpOwogICAgICAgICAgICAgICAgY29sb3IgPSB2LnNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgaWYoY29sb3IgIT0gdi5zZSkgcmV0dXJuIDA7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDE7Cn0KCmludCBQb3coaW50IGEsIGludCBiKSB7CiAgICBpbnQgcmVzID0gMTsKICAgIHdoaWxlKGIgPiAwKSB7CiAgICAgICAgaWYoYiAmIDEpIHJlcyA9IG11bChyZXMsIGEpOwogICAgICAgIGEgPSBtdWwoYSwgYSksIGIgPj49IDE7CiAgICB9CiAgICByZXR1cm4gcmVzOwp9CgppbnQzMl90IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKDApLCBjb3V0LnRpZSgwKTsKICAgICNkZWZpbmUgdGFzayAidGV0IgogICAgaWYoZm9wZW4odGFzayIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4odGFzayIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3Blbih0YXNrIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICAKICAgIGNpbiA+PiBuID4+IG0gPj4gVDsKICAgIAogICAgZm9yKGludCBpPTE7aTw9VDtpKyspIHsKICAgICAgICBpbnQgeCwgeSwgdzsgY2luID4+IHggPj4geSA+PiB3OwogICAgICAgIHBpaSBjdXIgPSBtYWtlX3BhaXIoeCwgeSk7CiAgICAgICAgaWYobXBbY3VyXSkgewogICAgICAgICAgICBpZihtcFtjdXJdICE9IHcgKyAxKSByZXR1cm4gY291dCA8PCAwLCAwOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbXBbY3VyXSA9IHcgKyAxOwogICAgICAgICAgICB2dC5lYih4LCB5LCB3KTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIFQgPSAoaW50KSB2dC5zaXplKCk7CiAgICAKICAgIGlmKCFpZGVudCgpKSBjb3V0IDw8IDA7CiAgICBlbHNlIGNvdXQgPDwgUG93KDIsIG4gKyBtIC0gVCAtIDEpOwogICAgcmV0dXJuIDA7Cn0=