#include <bits/stdc++.h>
using namespace std;
const int MAXN = 105;
vector<int> adj[MAXN]; // Danh sách k?
bool visited[MAXN];
int parent[MAXN]; // Luu d?nh cha trong DFS
vector<pair<int, int>> directedEdges; // Danh sách c?nh có hu?ng
int n, m, t;
// DFS ki?m tra liên thông m?nh
void dfs(int u) {
visited[u] = true;
for (int v : adj[u]) {
if (!visited[v]) dfs(v);
}
}
// Ki?m tra d? th? có d?nh chi?u du?c không
bool isStronglyOrientable() {
// Ki?m tra liên thông
fill(visited, visited + n + 1, false);
dfs(1);
if (count(visited + 1, visited + n + 1, true) != n) return false;
// Ki?m tra liên thông trên d? th? ngu?c
vector<int> reverseAdj[MAXN];
for (int u = 1; u <= n; u++) {
for (int v : adj[u]) {
reverseAdj[v].push_back(u);
}
}
fill(visited, visited + n + 1, false);
swap(adj, reverseAdj);
dfs(1);
swap(adj, reverseAdj);
return count(visited + 1, visited + n + 1, true) == n;
}
// Ð?nh chi?u d? th? s? d?ng DFS
void orientGraph(int u) {
visited[u] = true;
for (int v : adj[u]) {
if (!visited[v]) {
parent[v] = u;
directedEdges.emplace_back(u, v);
orientGraph(v);
} else if (parent[u] != v) {
directedEdges.emplace_back(u, v); // Ch?n hu?ng còn l?i
}
}
}
int main() {
cin >> t >> n >> m;
vector<pair<int, int>> edges(m);
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
edges[i] = {u, v};
}
if (t == 1) {
cout << (isStronglyOrientable() ? 1 : 0) << endl;
} else if (t == 2) {
fill(visited, visited + n + 1, false);
fill(parent, parent + n + 1, -1);
orientGraph(1);
sort(directedEdges.begin(), directedEdges.end());
cout << n << " " << m << endl;
for (auto [u, v] : directedEdges) {
cout << u << " " << v << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYTiA9IDEwNTsKdmVjdG9yPGludD4gYWRqW01BWE5dOyAgLy8gRGFuaCBzw6FjaCBrPwpib29sIHZpc2l0ZWRbTUFYTl07CmludCBwYXJlbnRbTUFYTl07ICAgICAgIC8vIEx1dSBkP25oIGNoYSB0cm9uZyBERlMKdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiBkaXJlY3RlZEVkZ2VzOyAvLyBEYW5oIHPDoWNoIGM/bmggY8OzIGh1P25nCmludCBuLCBtLCB0OwoKLy8gREZTIGtpP20gdHJhIGxpw6puIHRow7RuZyBtP25oCnZvaWQgZGZzKGludCB1KSB7CiAgICB2aXNpdGVkW3VdID0gdHJ1ZTsKICAgIGZvciAoaW50IHYgOiBhZGpbdV0pIHsKICAgICAgICBpZiAoIXZpc2l0ZWRbdl0pIGRmcyh2KTsKICAgIH0KfQoKLy8gS2k/bSB0cmEgZD8gdGg/IGPDsyBkP25oIGNoaT91IGR1P2Mga2jDtG5nCmJvb2wgaXNTdHJvbmdseU9yaWVudGFibGUoKSB7CiAgICAvLyBLaT9tIHRyYSBsacOqbiB0aMO0bmcKICAgIGZpbGwodmlzaXRlZCwgdmlzaXRlZCArIG4gKyAxLCBmYWxzZSk7CiAgICBkZnMoMSk7CiAgICBpZiAoY291bnQodmlzaXRlZCArIDEsIHZpc2l0ZWQgKyBuICsgMSwgdHJ1ZSkgIT0gbikgcmV0dXJuIGZhbHNlOwoKICAgIC8vIEtpP20gdHJhIGxpw6puIHRow7RuZyB0csOqbiBkPyB0aD8gbmd1P2MKICAgIHZlY3RvcjxpbnQ+IHJldmVyc2VBZGpbTUFYTl07CiAgICBmb3IgKGludCB1ID0gMTsgdSA8PSBuOyB1KyspIHsKICAgICAgICBmb3IgKGludCB2IDogYWRqW3VdKSB7CiAgICAgICAgICAgIHJldmVyc2VBZGpbdl0ucHVzaF9iYWNrKHUpOwogICAgICAgIH0KICAgIH0KICAgIGZpbGwodmlzaXRlZCwgdmlzaXRlZCArIG4gKyAxLCBmYWxzZSk7CiAgICBzd2FwKGFkaiwgcmV2ZXJzZUFkaik7CiAgICBkZnMoMSk7CiAgICBzd2FwKGFkaiwgcmV2ZXJzZUFkaik7CiAgICByZXR1cm4gY291bnQodmlzaXRlZCArIDEsIHZpc2l0ZWQgKyBuICsgMSwgdHJ1ZSkgPT0gbjsKfQoKLy8gw5A/bmggY2hpP3UgZD8gdGg/IHM/IGQ/bmcgREZTCnZvaWQgb3JpZW50R3JhcGgoaW50IHUpIHsKICAgIHZpc2l0ZWRbdV0gPSB0cnVlOwogICAgZm9yIChpbnQgdiA6IGFkalt1XSkgewogICAgICAgIGlmICghdmlzaXRlZFt2XSkgewogICAgICAgICAgICBwYXJlbnRbdl0gPSB1OwogICAgICAgICAgICBkaXJlY3RlZEVkZ2VzLmVtcGxhY2VfYmFjayh1LCB2KTsKICAgICAgICAgICAgb3JpZW50R3JhcGgodik7CiAgICAgICAgfSBlbHNlIGlmIChwYXJlbnRbdV0gIT0gdikgewogICAgICAgICAgICBkaXJlY3RlZEVkZ2VzLmVtcGxhY2VfYmFjayh1LCB2KTsgLy8gQ2g/biBodT9uZyBjw7JuIGw/aQogICAgICAgIH0KICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBjaW4gPj4gdCA+PiBuID4+IG07CiAgICB2ZWN0b3I8cGFpcjxpbnQsIGludD4+IGVkZ2VzKG0pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyBpKyspIHsKICAgICAgICBpbnQgdSwgdjsKICAgICAgICBjaW4gPj4gdSA+PiB2OwogICAgICAgIGFkalt1XS5wdXNoX2JhY2sodik7CiAgICAgICAgYWRqW3ZdLnB1c2hfYmFjayh1KTsKICAgICAgICBlZGdlc1tpXSA9IHt1LCB2fTsKICAgIH0KCiAgICBpZiAodCA9PSAxKSB7CiAgICAgICAgY291dCA8PCAoaXNTdHJvbmdseU9yaWVudGFibGUoKSA/IDEgOiAwKSA8PCBlbmRsOwogICAgfSBlbHNlIGlmICh0ID09IDIpIHsKICAgICAgICBmaWxsKHZpc2l0ZWQsIHZpc2l0ZWQgKyBuICsgMSwgZmFsc2UpOwogICAgICAgIGZpbGwocGFyZW50LCBwYXJlbnQgKyBuICsgMSwgLTEpOwogICAgICAgIG9yaWVudEdyYXBoKDEpOwogICAgICAgIHNvcnQoZGlyZWN0ZWRFZGdlcy5iZWdpbigpLCBkaXJlY3RlZEVkZ2VzLmVuZCgpKTsKCiAgICAgICAgY291dCA8PCBuIDw8ICIgIiA8PCBtIDw8IGVuZGw7CiAgICAgICAgZm9yIChhdXRvIFt1LCB2XSA6IGRpcmVjdGVkRWRnZXMpIHsKICAgICAgICAgICAgY291dCA8PCB1IDw8ICIgIiA8PCB2IDw8IGVuZGw7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAwOwp9Cg==