#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Edge {
int u, v, w, id;
};
struct DSU {
vector<int> parent;
DSU(int n) {
parent.resize(n + 1);
for (int i = 1; i <= n; ++i) parent[i] = i;
}
int find(int i) {
if (parent[i] == i) return i;
return parent[i] = find(parent[i]);
}
void unite(int i, int j) {
int root_i = find(i);
int root_j = find(j);
if (root_i != root_j) parent[root_i] = root_j;
}
};
bool compareEdges(const Edge& a, const Edge& b) {
return a.w < b.w;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m;
if (!(cin >> n >> m)) return 0;
vector<Edge> edges(m);
for (int i = 0; i < m; ++i) {
cin >> edges[i].u >> edges[i].v >> edges[i].w;
edges[i].id = i;
}
vector<Edge> sorted_edges = edges;
sort(sorted_edges.begin(), sorted_edges.end(), compareEdges);
vector<bool> result(m);
DSU dsu(n);
int i = 0;
while (i < m) {
int j = i;
while (j < m && sorted_edges[j].w == sorted_edges[i].w) {
if (dsu.find(sorted_edges[j].u) != dsu.find(sorted_edges[j].v)) {
result[sorted_edges[j].id] = true;
} else {
result[sorted_edges[j].id] = false;
}
j++;
}
j = i;
while (j < m && sorted_edges[j].w == sorted_edges[i].w) {
dsu.unite(sorted_edges[j].u, sorted_edges[j].v);
j++;
}
i = j;
}
for (int k = 0; k < m; ++k) {
if (result[k]) cout << "TAK\n";
else cout << "NIE\n";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBFZGdlIHsKICAgIGludCB1LCB2LCB3LCBpZDsKfTsKCnN0cnVjdCBEU1UgewogICAgdmVjdG9yPGludD4gcGFyZW50OwogICAgRFNVKGludCBuKSB7CiAgICAgICAgcGFyZW50LnJlc2l6ZShuICsgMSk7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSBwYXJlbnRbaV0gPSBpOwogICAgfQogICAgaW50IGZpbmQoaW50IGkpIHsKICAgICAgICBpZiAocGFyZW50W2ldID09IGkpIHJldHVybiBpOwogICAgICAgIHJldHVybiBwYXJlbnRbaV0gPSBmaW5kKHBhcmVudFtpXSk7CiAgICB9CiAgICB2b2lkIHVuaXRlKGludCBpLCBpbnQgaikgewogICAgICAgIGludCByb290X2kgPSBmaW5kKGkpOwogICAgICAgIGludCByb290X2ogPSBmaW5kKGopOwogICAgICAgIGlmIChyb290X2kgIT0gcm9vdF9qKSBwYXJlbnRbcm9vdF9pXSA9IHJvb3RfajsKICAgIH0KfTsKCmJvb2wgY29tcGFyZUVkZ2VzKGNvbnN0IEVkZ2UmIGEsIGNvbnN0IEVkZ2UmIGIpIHsKICAgIHJldHVybiBhLncgPCBiLnc7Cn0KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwoKICAgIGludCBuLCBtOwogICAgaWYgKCEoY2luID4+IG4gPj4gbSkpIHJldHVybiAwOwoKICAgIHZlY3RvcjxFZGdlPiBlZGdlcyhtKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgKytpKSB7CiAgICAgICAgY2luID4+IGVkZ2VzW2ldLnUgPj4gZWRnZXNbaV0udiA+PiBlZGdlc1tpXS53OwogICAgICAgIGVkZ2VzW2ldLmlkID0gaTsKICAgIH0KCiAgICB2ZWN0b3I8RWRnZT4gc29ydGVkX2VkZ2VzID0gZWRnZXM7CiAgICBzb3J0KHNvcnRlZF9lZGdlcy5iZWdpbigpLCBzb3J0ZWRfZWRnZXMuZW5kKCksIGNvbXBhcmVFZGdlcyk7CgogICAgdmVjdG9yPGJvb2w+IHJlc3VsdChtKTsKICAgIERTVSBkc3Uobik7CgogICAgaW50IGkgPSAwOwogICAgd2hpbGUgKGkgPCBtKSB7CiAgICAgICAgaW50IGogPSBpOwogICAgICAgIHdoaWxlIChqIDwgbSAmJiBzb3J0ZWRfZWRnZXNbal0udyA9PSBzb3J0ZWRfZWRnZXNbaV0udykgewogICAgICAgICAgICBpZiAoZHN1LmZpbmQoc29ydGVkX2VkZ2VzW2pdLnUpICE9IGRzdS5maW5kKHNvcnRlZF9lZGdlc1tqXS52KSkgewogICAgICAgICAgICAgICAgcmVzdWx0W3NvcnRlZF9lZGdlc1tqXS5pZF0gPSB0cnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVzdWx0W3NvcnRlZF9lZGdlc1tqXS5pZF0gPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBqKys7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGogPSBpOwogICAgICAgIHdoaWxlIChqIDwgbSAmJiBzb3J0ZWRfZWRnZXNbal0udyA9PSBzb3J0ZWRfZWRnZXNbaV0udykgewogICAgICAgICAgICBkc3UudW5pdGUoc29ydGVkX2VkZ2VzW2pdLnUsIHNvcnRlZF9lZGdlc1tqXS52KTsKICAgICAgICAgICAgaisrOwogICAgICAgIH0KICAgICAgICBpID0gajsKICAgIH0KCiAgICBmb3IgKGludCBrID0gMDsgayA8IG07ICsraykgewogICAgICAgIGlmIChyZXN1bHRba10pIGNvdXQgPDwgIlRBS1xuIjsKICAgICAgICBlbHNlIGNvdXQgPDwgIk5JRVxuIjsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==