#include <bits/stdc++.h>
using namespace std;
vector <int> a[100001],c[100001];
int d[100001],n,m,u,v,k,kq,f[100001];
const int mod=round(1e9)+7;
void DFS(int u,int p)
{
d[u]=1;
for(int i=0;i<a[u].size();i++)
{
int v=a[u][i];
if(d[v]==0)
{
f[v]=f[u]^c[u][i];
DFS(v,u);
}
else if((f[v]^f[u]^c[u][i])==1) { cout<<0; exit(0); }
}
}
int main()
{
//freopen("ntu.inp","r",stdin);
//freopen("ntu.out","w",stdout);
cin>>n>>m;
while(m--)
{
cin>>u>>v>>k; k=1-k;
a[u].push_back(v); a[v].push_back(u);
c[u].push_back(k); c[v].push_back(k);
}
for(u=1;u<=n;u++)
if(d[u]==0)
{
DFS(u,0);
if(kq==0) kq=1; else kq=kq*2%mod;
}
cout<<kq;
}
74. Search a 2D Matrix | 71. Simplify Path |
62. Unique Paths | 50. Pow(x, n) |
43. Multiply Strings | 34. Find First and Last Position of Element in Sorted Array |
33. Search in Rotated Sorted Array | 17. Letter Combinations of a Phone Number |
5. Longest Palindromic Substring | 3. Longest Substring Without Repeating Characters |
1312. Minimum Insertion Steps to Make a String Palindrome | 1092. Shortest Common Supersequence |
1044. Longest Duplicate Substring | 1032. Stream of Characters |
987. Vertical Order Traversal of a Binary Tree | 952. Largest Component Size by Common Factor |
212. Word Search II | 174. Dungeon Game |
127. Word Ladder | 123. Best Time to Buy and Sell Stock III |
85. Maximal Rectangle | 84. Largest Rectangle in Histogram |
60. Permutation Sequence | 42. Trapping Rain Water |
32. Longest Valid Parentheses | Cutting a material |
Bubble Sort | Number of triangles |
AND path in a binary tree | Factorial equations |