#include <bits/stdc++.h>
using namespace std;
template <typename T>
void Read(T &cn) {
  char c;
  int sig = 1;
  while (!isdigit(c = getchar()))
    if (c == '-') sig = 0;
  if (sig) {
    cn = c - 48;
    while (isdigit(c = getchar())) cn = cn * 10 + c - 48;
  } else {
    cn = 48 - c;
    while (isdigit(c = getchar())) cn = cn * 10 + 48 - c;
  }
}
template <typename T>
void Write(T cn) {
  int wei = 0;
  T cm = 0;
  int cx = cn % 10;
  cn /= 10;
  if (cn < 0 || cx < 0) {
    putchar('-');
    cn = 0 - cn;
    cx = 0 - cx;
  }
  while (cn) cm = cm * 10 + cn % 10, cn /= 10, wei++;
  while (wei--) putchar(cm % 10 + 48), cm /= 10;
  putchar(cx + 48);
}
template <typename T>
void WriteL(T cn) {
  Write(cn);
  puts("");
}
template <typename T>
void WriteS(T cn) {
  Write(cn);
  putchar(' ');
}
template <typename T>
void Max(T &cn, T cm) {
  cn = cn < cm ? cm : cn;
}
template <typename T>
void Min(T &cn, T cm) {
  cn = cn < cm ? cn : cm;
}
int n, m;
struct Dp_lai {
  int a[18 + 1];
  long long ans;
  void qing() {
    ans = 1000000000000;
    memset(a, 0, sizeof(a));
  }
  void outit() {
    for (int i = 1; i <= n; i++) WriteS(a[i]);
    puts("");
  }
};
int e[18 + 1][18 + 1], g[18 + 1];
long long de[18 + 1];
Dp_lai f[1 << 18];
int du[18 + 1], dui[18 + 1];
int main() {
  Read(n);
  Read(m);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) e[i][j] = 0;
  memset(du, 0, sizeof(du));
  memset(de, 0, sizeof(de));
  for (int i = 1; i <= m; i++) {
    int bx, by;
    long long bz;
    Read(bx);
    Read(by);
    Read(bz);
    e[by][bx] = 1;
    de[bx] += bz;
    de[by] -= bz;
    du[bx]++;
  }
  for (int i = 1; i <= n; i++) {
    g[i] = 0;
    for (int j = 1; j <= n; j++)
      if (e[j][i]) g[i] |= 1 << (j - 1);
  }
  int l = 0, r = 0;
  for (int i = 1; i <= n; i++)
    if (!du[i]) dui[++r] = i;
  while (l < r) {
    int dang = dui[++l];
    for (int i = 1; i <= n; i++)
      if (e[dang][i]) {
        du[i]--;
        if (!du[i]) dui[++r] = i;
      }
  }
  for (int i = 0; i < (1 << n); i++) f[i].qing();
  f[0].ans = 0;
  for (int i = 1; i <= n; i++)
    for (int j = n; j >= 1; j--)
      for (int k = 0; k < (1 << n); k++) {
        int bx = dui[j];
        if (((k & (1 << (bx - 1))) != 0) || ((k & g[bx]) != g[bx]) ||
            (f[k].ans + i * de[bx] >= f[k | (1 << (bx - 1))].ans))
          continue;
        f[k | (1 << (bx - 1))] = f[k];
        f[k | (1 << (bx - 1))].ans += i * de[bx];
        f[k | (1 << (bx - 1))].a[bx] = i;
      }
  f[(1 << n) - 1].outit();
  return 0;
}
