ad65ae9646253d396843b24254716d7d53fd8babbcfefd9523fde5954458c2a6
// https://szkopul.edu.pl/problemset/problem/GfCNwxdYubiS1Nlnb_h7VkJW/site/?key=statement
#include <bits/stdc++.h>
// #define GARY_DBG
#define GARY_LIB
constexpr int sizik = 500 * 1001;
#define ar std::array
typedef std::vector<std::vector<int>> _kra;
int deg[sizik];
std::vector<int> kra[sizik];
std::vector<int> kra1[sizik];
int in_cnt[sizik];
std::pair<int, int> create_pair(int a, int b) {
if (a > b) std::swap(a, b);
return std::make_pair(a, b);
}
void not_good() {
std::cout << "NIE\n";
}
void solve() {
int n, m;
std::cin >> n >> m;
std::vector<ar<int, 2>> kraw(m);
for (auto& [a, b] : kraw) {
std::cin >> a >> b;
kra[a].push_back(b);
kra[b].push_back(a);
deg[a]++;
deg[b]++;
}
if (m == 0) {
std::cout << "TAK\n";
for (int i = 1; i <= n; i++) {
std::cout << i << ' ';
}
std::cout << '\n';
return;
}
if (deg[1] == 0 || deg[2] == 0) {
not_good();
return;
}
std::map<std::pair<int, int>, bool> mp;
std::queue<int> q;
q.push(1);
int g = 0;
while (!q.empty()) {
int v = q.front();
q.pop();
for (const auto& u : kra[v]) {
auto p = create_pair(v, u);
if (!mp[p]) {
g++;
mp[p] = 1;
kra1[v].push_back(u);
in_cnt[u]++;
if (u != 2 && 2 * in_cnt[u] > deg[u]) {
not_good();
return;
}
if (u != 2 && 2 * in_cnt[u] == deg[u]) {
q.push(u);
}
}
}
}
if (g != m) {
not_good();
return;
}
while (!q.empty()) {
q.pop();
}
std::vector<int> topo_kol;
topo_kol.reserve(n);
std::vector<int> izolaki;
izolaki.reserve(n);
for (int i = 3; i <= n; i++) {
if (in_cnt[i] == 0) {
izolaki.push_back(i);
}
}
q.push(1);
while (!q.empty()) {
int v = q.front();
q.pop();
topo_kol.push_back(v);
for (const auto& u : kra1[v]) {
if (--in_cnt[u] == 0) {
q.push(u);
}
}
}
if ((izolaki.size() + topo_kol.size()) != n) {
not_good();
return;
}
int last = 1;
std::vector<int> ans(n + 1);
for (const auto& x : topo_kol) {
ans[x] = last++;
}
for (const auto& x : izolaki) {
ans[x] = last++;
}
std::cout << "TAK\n";
for (int i = 1; i <= n; i++) {
std::cout << ans[i] << ' ';
}
std::cout << '\n';
}
int32_t main() {
#ifndef GARY_DBG
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
#endif
int t = 1;
// std::cin >> t;
for (; t > 0; t--) {
solve();
}
return 0;
}