#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using Int = long long; template ostream &operator<<(ostream &os, const vector &as); template ostream &operator<<(ostream &os, const pair &a) { return os << "(" << a.first << ", " << a.second << ")"; }; template ostream &operator<<(ostream &os, const vector &as) { const int sz = as.size(); os << "["; for (int i = 0; i < sz; ++i) { if (i >= 256) { os << ", ..."; break; } if (i > 0) { os << ", "; } os << as[i]; } return os << "]"; } template void pv(T a, T b) { for (T i = a; i != b; ++i) cerr << *i << " "; cerr << endl; } template bool chmin(T &t, const T &f) { if (t > f) { t = f; return true; } return false; } template bool chmax(T &t, const T &f) { if (t < f) { t = f; return true; } return false; } #define COLOR(s) ("\x1b[" s "m") int N, M; vector X, Y, Z; vector V, L, R; int main() { for (int numCases; ~scanf("%d", &numCases); ) { for (int caseId = 1; caseId <= numCases; ++caseId) { scanf("%d%d", &N, &M); X.resize(M); Y.resize(M); Z.resize(M); V.resize(M); L.resize(M); R.resize(M); for (int i = 0; i < M; ++i) { scanf("%d%d%d%lld%lld%lld", &X[i], &Y[i], &Z[i], &V[i], &L[i], &R[i]); --X[i]; --Y[i]; --Z[i]; } vector as(N, 0); queue que; vector vis(M, 0); using Entry = pair; vector, greater>> alarms(N); auto check = [&](int i) -> void { if (vis[i]) return; const Int b = as[X[i]] + as[Y[i]]; if (b >= V[i]) { vis[i] = 1; que.push(i); } else { const Int t = (V[i] - b + 1) / 2; alarms[X[i]].emplace(as[X[i]] + t, i); alarms[Y[i]].emplace(as[Y[i]] + t, i); } }; for (int i = 0; i < M; ++i) check(i); for (; que.size(); ) { const int i = que.front(); que.pop(); const int u = Z[i]; chmax(as[u], L[i]); for (; alarms[u].size() && alarms[u].top().first <= as[u]; ) { const int j = alarms[u].top().second; alarms[u].pop(); check(j); } } bool ok = true; for (int i = 0; i < M; ++i) if (as[X[i]] + as[Y[i]] >= V[i]) ok = ok && (as[Z[i]] <= R[i]); if (ok) { for (int u = 0; u < N; ++u) { if (u) printf(" "); printf("%lld", as[u]); } puts(""); } else { puts("-1"); } } #ifndef LOCAL break; #endif } return 0; }