#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
using ld = long double;
#define Youssef() ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
#define endl "\n"
#define unmap unordered_map
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define vi vector<int>
#define vvi vector<vi>
#define vll vector<ll>
#define vvl vector<vll>
#define pii pair<int, int>
#define si(x) ll(x.size())
#define For(i, j, n) for(ll i = j; i < n; i++)
#define rFor(i, j, n) for(ll i = j; i >= n; i--)
#define read(a) For(i, 0, si(a)) cin >> a[i];
#define readd(a) For(i, 0, si(a)) For(j, 0, si(a[0])) cin >> a[i][j];
#define print(a) For(j, 0, si(a)) cout << a[j] << (j < si(a)-1 ? " " : ""); cout << endl;
#define fi first
#define se second
#define int ll
const int dx[] = {0, 1, 0, -1, -1, 1, -1, 1};
const int dy[] = {1, 0, -1, 0, 1, 1, -1, -1};
struct DSU{
vi parent;
vi size;
DSU(int n){parent.resize(n+2);size.assign(n+2,1);For(i,0,n+2)parent[i]=i;}
void set_union(int a, int b)
{
a = find(a);
b = find(b);
if(a == b) return;
if(size[a] < size[b]) swap(a, b);
parent[b] = a;
size[a] += size[b];
}
int find(int a)
{
if(parent[a] == a || parent[a] == 0) return a;
return parent[a] = find(parent[a]);
}
};
int n, powers[1000000];
vector<vector<pii>> adj;
int subtree[1000000];
int dfs1(int node, int parent)
{
int cnt = 0;
for(auto [v, w] : adj[node])
{
if(v == parent) continue;
cnt = 1 + dfs1(v, node);
subtree[node] += cnt;
}
return subtree[node];
}
void dfs2(int node, int parent)
{
for(auto [v, w] : adj[node])
{
if(v == parent) continue;
int t = subtree[v] + 1;
powers[w] = t * (n - t);
dfs2(v, node);
}
}
signed main()
{
Youssef();
// freopen("lineup.out", "w", stdout);
// freopen("lineup.in", "r", stdin);
int tt = 1;
// cin >> tt;
while (tt--)
{
int m; cin >> n >> m;
vector<array<int, 3>> a(m);
adj = vector<vector<pii>>(n+1);
For(i, 0, m)
cin >> a[i][1] >> a[i][2] >> a[i][0];
sort(all(a));
DSU dsu(n);
For(i, 0, m)
{
if(dsu.find(a[i][1]) != dsu.find(a[i][2]))
{
dsu.set_union(a[i][1], a[i][2]);
adj[a[i][1]].push_back({a[i][2], a[i][0]});
adj[a[i][2]].push_back({a[i][1], a[i][0]});
}
}
dfs1(1, 1);
dfs2(1, 1);
int l = 0;
For(i, 0, 1e6-1)
{
powers[i+1] += powers[i] / 2;
powers[i] %= 2;
if(powers[i+1]) l = i+1;
}
rFor(i, l, 0) cout << powers[i];
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7CnVzaW5nIGxkID0gbG9uZyBkb3VibGU7CiNkZWZpbmUgWW91c3NlZigpIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpLCBjaW4udGllKG51bGxwdHIpLCBjb3V0LnRpZShudWxscHRyKQojZGVmaW5lIGVuZGwgIlxuIgojZGVmaW5lIHVubWFwIHVub3JkZXJlZF9tYXAKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCiNkZWZpbmUgcmFsbCh4KSB4LnJiZWdpbigpLCB4LnJlbmQoKQojZGVmaW5lIHZpIHZlY3RvcjxpbnQ+CiNkZWZpbmUgdnZpIHZlY3Rvcjx2aT4KI2RlZmluZSB2bGwgdmVjdG9yPGxsPgojZGVmaW5lIHZ2bCB2ZWN0b3I8dmxsPgojZGVmaW5lIHBpaSBwYWlyPGludCwgaW50PgojZGVmaW5lIHNpKHgpIGxsKHguc2l6ZSgpKQojZGVmaW5lIEZvcihpLCBqLCBuKSBmb3IobGwgaSA9IGo7IGkgPCBuOyBpKyspCiNkZWZpbmUgckZvcihpLCBqLCBuKSBmb3IobGwgaSA9IGo7IGkgPj0gbjsgaS0tKQojZGVmaW5lIHJlYWQoYSkgRm9yKGksIDAsIHNpKGEpKSBjaW4gPj4gYVtpXTsKI2RlZmluZSByZWFkZChhKSBGb3IoaSwgMCwgc2koYSkpIEZvcihqLCAwLCBzaShhWzBdKSkgY2luID4+IGFbaV1bal07CiNkZWZpbmUgcHJpbnQoYSkgRm9yKGosIDAsIHNpKGEpKSBjb3V0IDw8IGFbal0gPDwgKGogPCBzaShhKS0xID8gIiAiIDogIiIpOyBjb3V0IDw8IGVuZGw7CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBpbnQgbGwKY29uc3QgaW50IGR4W10gPSB7MCwgMSwgMCwgLTEsIC0xLCAxLCAtMSwgMX07CmNvbnN0IGludCBkeVtdID0gezEsIDAsIC0xLCAwLCAxLCAxLCAtMSwgLTF9OwoKc3RydWN0IERTVXsKICAgIHZpIHBhcmVudDsKICAgIHZpIHNpemU7CiAgICBEU1UoaW50IG4pe3BhcmVudC5yZXNpemUobisyKTtzaXplLmFzc2lnbihuKzIsMSk7Rm9yKGksMCxuKzIpcGFyZW50W2ldPWk7fQogICAgdm9pZCBzZXRfdW5pb24oaW50IGEsIGludCBiKQogICAgewogICAgICAgIGEgPSBmaW5kKGEpOwogICAgICAgIGIgPSBmaW5kKGIpOwogICAgICAgIGlmKGEgPT0gYikgcmV0dXJuOwogICAgICAgIGlmKHNpemVbYV0gPCBzaXplW2JdKSBzd2FwKGEsIGIpOwogICAgICAgIHBhcmVudFtiXSA9IGE7CiAgICAgICAgc2l6ZVthXSArPSBzaXplW2JdOwogICAgfQogICAgaW50IGZpbmQoaW50IGEpCiAgICB7CiAgICAgICAgaWYocGFyZW50W2FdID09IGEgfHwgcGFyZW50W2FdID09IDApIHJldHVybiBhOwogICAgICAgIHJldHVybiBwYXJlbnRbYV0gPSBmaW5kKHBhcmVudFthXSk7CiAgICB9Cn07CgppbnQgbiwgcG93ZXJzWzEwMDAwMDBdOwp2ZWN0b3I8dmVjdG9yPHBpaT4+IGFkajsKaW50IHN1YnRyZWVbMTAwMDAwMF07CgppbnQgZGZzMShpbnQgbm9kZSwgaW50IHBhcmVudCkKewogICAgaW50IGNudCA9IDA7CiAgICBmb3IoYXV0byBbdiwgd10gOiBhZGpbbm9kZV0pCiAgICB7CiAgICAgICAgaWYodiA9PSBwYXJlbnQpIGNvbnRpbnVlOwogICAgICAgIGNudCA9IDEgKyBkZnMxKHYsIG5vZGUpOwogICAgICAgIHN1YnRyZWVbbm9kZV0gKz0gY250OwogICAgfQogICAgcmV0dXJuIHN1YnRyZWVbbm9kZV07Cn0KCnZvaWQgZGZzMihpbnQgbm9kZSwgaW50IHBhcmVudCkKewogICAgZm9yKGF1dG8gW3YsIHddIDogYWRqW25vZGVdKQogICAgewogICAgICAgIGlmKHYgPT0gcGFyZW50KSBjb250aW51ZTsKICAgICAgICBpbnQgdCA9IHN1YnRyZWVbdl0gKyAxOwogICAgICAgIHBvd2Vyc1t3XSA9IHQgKiAobiAtIHQpOwogICAgICAgIGRmczIodiwgbm9kZSk7CiAgICB9Cn0KCnNpZ25lZCBtYWluKCkKewogICAgWW91c3NlZigpOwogICAgLy8gZnJlb3BlbigibGluZXVwLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIC8vIGZyZW9wZW4oImxpbmV1cC5pbiIsICJyIiwgc3RkaW4pOwogICAgaW50IHR0ID0gMTsKICAgIC8vIGNpbiA+PiB0dDsKICAgIHdoaWxlICh0dC0tKQogICAgewogICAgICAgIGludCBtOyBjaW4gPj4gbiA+PiBtOwogICAgICAgIHZlY3RvcjxhcnJheTxpbnQsIDM+PiBhKG0pOwogICAgICAgIGFkaiA9IHZlY3Rvcjx2ZWN0b3I8cGlpPj4obisxKTsKICAgICAgICBGb3IoaSwgMCwgbSkKICAgICAgICAgICAgY2luID4+IGFbaV1bMV0gPj4gYVtpXVsyXSA+PiBhW2ldWzBdOwogICAgICAgIHNvcnQoYWxsKGEpKTsKICAgICAgICBEU1UgZHN1KG4pOwogICAgICAgIEZvcihpLCAwLCBtKQogICAgICAgIHsKICAgICAgICAgICAgaWYoZHN1LmZpbmQoYVtpXVsxXSkgIT0gZHN1LmZpbmQoYVtpXVsyXSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRzdS5zZXRfdW5pb24oYVtpXVsxXSwgYVtpXVsyXSk7CiAgICAgICAgICAgICAgICBhZGpbYVtpXVsxXV0ucHVzaF9iYWNrKHthW2ldWzJdLCBhW2ldWzBdfSk7CiAgICAgICAgICAgICAgICBhZGpbYVtpXVsyXV0ucHVzaF9iYWNrKHthW2ldWzFdLCBhW2ldWzBdfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZGZzMSgxLCAxKTsKICAgICAgICBkZnMyKDEsIDEpOwogICAgICAgIGludCBsID0gMDsKICAgICAgICBGb3IoaSwgMCwgMWU2LTEpCiAgICAgICAgewogICAgICAgICAgICBwb3dlcnNbaSsxXSArPSBwb3dlcnNbaV0gLyAyOwogICAgICAgICAgICBwb3dlcnNbaV0gJT0gMjsKICAgICAgICAgICAgaWYocG93ZXJzW2krMV0pIGwgPSBpKzE7CiAgICAgICAgfQogICAgICAgIHJGb3IoaSwgbCwgMCkgY291dCA8PCBwb3dlcnNbaV07CiAgICB9Cn0=