#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
const int MAXN = 100005;
vector<int> adj[MAXN];
bool visited[MAXN];
int tin[MAXN], low[MAXN], timer;
set<pair<int, int>> bridges;
bool dfsCheck(int u, int target) {
visited[u] = true;
if (u == target) return true;
for (int v : adj[u]) {
if (!visited[v] && dfsCheck(v, target)) return true;
}
return false;
}
vector<pair<int, int>> tim_canh_cau(int n) {
vector<pair<int, int>> bridgeEdges;
for (int u = 1; u <= n; ++u) {
for (int v : adj[u]) {
if (u < v) {
adj[u].erase(remove(adj[u].begin(), adj[u].end(), v), adj[u].end());
adj[v].erase(remove(adj[v].begin(), adj[v].end(), u), adj[v].end());
fill(visited, visited + n + 1, false);
if (!dfsCheck(u, v)) {
bridgeEdges.emplace_back(u, v);
}
adj[u].push_back(v);
adj[v].push_back(u);
}
}
}
return bridgeEdges;
}
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
vector<pair<int, int>> bridges = tim_canh_cau(n);
cout << bridges.size() << endl;
for (auto [u, v] : bridges) {
cout << u << " " << v << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBNQVhOID0gMTAwMDA1Owp2ZWN0b3I8aW50PiBhZGpbTUFYTl07CmJvb2wgdmlzaXRlZFtNQVhOXTsKaW50IHRpbltNQVhOXSwgbG93W01BWE5dLCB0aW1lcjsKc2V0PHBhaXI8aW50LCBpbnQ+PiBicmlkZ2VzOwoKYm9vbCBkZnNDaGVjayhpbnQgdSwgaW50IHRhcmdldCkgewogICAgdmlzaXRlZFt1XSA9IHRydWU7CiAgICBpZiAodSA9PSB0YXJnZXQpIHJldHVybiB0cnVlOwogICAgZm9yIChpbnQgdiA6IGFkalt1XSkgewogICAgICAgIGlmICghdmlzaXRlZFt2XSAmJiBkZnNDaGVjayh2LCB0YXJnZXQpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiB0aW1fY2FuaF9jYXUoaW50IG4pIHsKICAgIHZlY3RvcjxwYWlyPGludCwgaW50Pj4gYnJpZGdlRWRnZXM7CiAgICBmb3IgKGludCB1ID0gMTsgdSA8PSBuOyArK3UpIHsKICAgICAgICBmb3IgKGludCB2IDogYWRqW3VdKSB7CiAgICAgICAgICAgIGlmICh1IDwgdikgewogICAgICAgICAgICAgICAgYWRqW3VdLmVyYXNlKHJlbW92ZShhZGpbdV0uYmVnaW4oKSwgYWRqW3VdLmVuZCgpLCB2KSwgYWRqW3VdLmVuZCgpKTsKICAgICAgICAgICAgICAgIGFkalt2XS5lcmFzZShyZW1vdmUoYWRqW3ZdLmJlZ2luKCksIGFkalt2XS5lbmQoKSwgdSksIGFkalt2XS5lbmQoKSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGZpbGwodmlzaXRlZCwgdmlzaXRlZCArIG4gKyAxLCBmYWxzZSk7CiAgICAgICAgICAgICAgICBpZiAoIWRmc0NoZWNrKHUsIHYpKSB7CiAgICAgICAgICAgICAgICAgICAgYnJpZGdlRWRnZXMuZW1wbGFjZV9iYWNrKHUsIHYpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBhZGpbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgICAgICAgICAgYWRqW3ZdLnB1c2hfYmFjayh1KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBicmlkZ2VFZGdlczsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgbiwgbTsKICAgIGNpbiA+PiBuID4+IG07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewogICAgICAgIGludCB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgYWRqW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICBhZGpbdl0ucHVzaF9iYWNrKHUpOwogICAgfQogICAgCiAgICB2ZWN0b3I8cGFpcjxpbnQsIGludD4+IGJyaWRnZXMgPSB0aW1fY2FuaF9jYXUobik7CiAgICBjb3V0IDw8IGJyaWRnZXMuc2l6ZSgpIDw8IGVuZGw7CiAgICBmb3IgKGF1dG8gW3UsIHZdIDogYnJpZGdlcykgewogICAgICAgIGNvdXQgPDwgdSA8PCAiICIgPDwgdiA8PCBlbmRsOwogICAgfQogICAgCiAgICByZXR1cm4gMDsKfQo=