OI XV - clo

// https://szkopul.edu.pl/problemset/problem/ptF7RsWMiiMdzzZWt5BKFAnT/site/?key=statement
// OI XV (1 etap)

// Cło

#include <bitset>
#include <iostream>
#include <vector>

constexpr int sizik = 100 * 1001;

std::vector<int> kra[sizik];

int ans[sizik];
int dep[sizik];

// std::bitset<sizik> visited;
short visited[sizik];

int helper = 1;
int result = -1;
int akt = 0;
int p, k;
bool isGood;

void DFS1(int v, int o) {
    if (visited[v] == akt || v == 0) {
        return;
    }

    visited[v] = akt;

    for (int i = 0; i < kra[v].size(); i++) {
        const auto r = kra[v][i];

        if (r != o) {
            if (visited[r] == akt) {
                p = v;
                k = r;
                isGood = true;

                for (int j = 0; j < kra[p].size(); j++) {
                    if (kra[p][j] == k) {
                        std::swap(kra[p][j], kra[p].back());
                        kra[p].pop_back();
                        break;
                    }
                }
                for (int j = 0; j < kra[k].size(); j++) {
                    if (kra[k][j] == p) {
                        std::swap(kra[k][j], kra[k].back());
                        kra[k].pop_back();
                        break;
                    }
                }
            } else {
                DFS1(r, v);
            }
        }
    }
}

void DFS2(int v, int o) {
    if (visited[v] == akt || v == 0) {
        return;
    }

    visited[v] = akt;
    if (o != -1 && ans[v] == 0) {
        ans[v] = o;
    }

    for (const auto& r : kra[v]) {
        if (visited[r] != akt) {
            DFS2(r, v);
        }
    }
}

int main() {
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    int n, m;
    std::cin >> n >> m;

    for (int i = 0; i < m; i++) {
        int a, b;
        std::cin >> a >> b;

        kra[a].push_back(b);
        kra[b].push_back(a);

        dep[a]++;
        dep[b]++;
    }

    for (int i = 1; i <= n; i++) {
        if (ans[i] != 0) {
            continue;
        }

        helper = i;
        akt++;
        isGood = false;
        DFS1(i, -1);

        if (isGood == false) {
            std::cout << "NIE\n";
            return 0;
        }

        ans[p] = k;

        akt++;
        DFS2(p, -1);
    }

    std::cout << "TAK\n";

    for (int i = 1; i <= n; i++) {
        std::cout << ans[i] << '\n';
    }

    return 0;
}