#include <bits/stdc++.h>
using namespace std;
vector<int> vec[200005];
queue<int> Q;
int n, m;
int cvp[200005];
int top[200005], in[200005];
int a[200005], b[200005], c[200005];
void oku() {
  int f, s, cost, i;
  scanf("%d %d", &n, &m);
  for (i = 1; i <= m; i++) {
    scanf("%d %d %d", &f, &s, &cost);
    vec[f].push_back(i);
    vec[s].push_back(i);
    a[i] = f;
    b[i] = s;
    c[i] = cost;
    top[f] += cost;
    top[s] += cost;
  }
  return;
}
void coz() {
  int nod, s;
  vector<int>::iterator it;
  memset(cvp, -1, sizeof cvp);
  Q.push(1);
  while (!Q.empty()) {
    nod = Q.front();
    Q.pop();
    for (it = vec[nod].begin(); it != vec[nod].end(); it++)
      if (cvp[*it] == -1) {
        if (nod == b[*it])
          s = a[*it];
        else
          s = b[*it];
        cvp[*it] = (nod == b[*it]);
        in[s] += c[*it];
        if (s != n && top[s] == 2 * in[s]) Q.push(s);
      }
  }
  for (int i = 1; i <= m; i++) printf("%d\n", cvp[i]);
  return;
}
int main() {
  oku();
  coz();
  return 0;
}
