#include <bits/stdc++.h>
using namespace std;
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
/* -1 -> None
0 -> at least one
1 -> any
-2 -> undecided
*/
int N,M; cin >> N >> M;
vector<tuple<int,int,int,int>> e(M);
vector<int> answer(M, -2);
vector<int> p(N), sz(N, 1);
iota(p.begin(), p.end(), 0);
function<int(int)> find = [&](int x){
return (x == p[x] ? x : p[x] = find(x));
};
function<bool(int,int)> unite = [&](int x, int y){
x = find(x); y = find(y);
if(x != y){
if(sz[x] < sz[y]) swap(x, y);
p[y] = x;
sz[x] += sz[y];
return true;
}
return false;
};
for(int i = 0; i < M; i++){
int x,y,z; cin >> x >> y >> z;
x--; y--;
e[i] = make_tuple(z, x, y, i);
}
sort(e.begin(), e.end());
int i = 0;
while(i < M){
int j = i;
while(j < M && get<0>(e[j]) == get<0>(e[i])){
if(find(get<1>(e[j])) == find(get<2>(e[j])))
answer[get<3>(e[j])] = -1;
++j;
}
bool ok = true;
j = i;
while(j < M && get<0>(e[j]) == get<0>(e[i])){
if(answer[get<3>(e[j])] == -1){
++j; continue;
}
if(unite(get<1>(e[j]), get<2>(e[j])) == false) // When I comment this line
ok = false;
++j;
}
j = i;
while(j < M && get<0>(e[j]) == get<0>(e[i])){
if(answer[get<3>(e[j])] == -1){
++j; continue;
}
if(ok) answer[get<3>(e[j])] = 1;
else answer[get<3>(e[j])] = 0;
++j;
}
i = j;
}
for(int i = 0; i < M; i++){
if(answer[i] == -1)
cout << "none" << '\n';
else if(answer[i] == 0)
cout << "at least one" << '\n';
else
cout << "any" << '\n';
}
return 0;
}