#include <bits/stdc++.h>
using namespace std;
vector<int> graph[1001];
vector<int> cycle_track;
int degree[1001] = {0};
bool vis[1001] = {0};
bool mark[1001] = {0};
int spanner_sum = 0;
void process_cycle() {
int min_degree_edge = 0;
int curr_v = cycle_track[0];
int min_degree_edge_v1 = 0, min_degree_edge_v2 = 0;
//cout << endl;
for (int i = 0; i < cycle_track.size(); i++) {
//cout << cycle_track[i] << " ";
}
//cout << endl;
for (int i = 1; i < cycle_track.size(); i++) {
mark[curr_v] = true;
int next_v = cycle_track[i];
int curr_v_degree = degree[curr_v];
int next_v_degree = degree[next_v];
if (curr_v_degree + next_v_degree > min_degree_edge) {
min_degree_edge = curr_v_degree + next_v_degree;
min_degree_edge_v1 = curr_v;
min_degree_edge_v2 = next_v;
}
curr_v = next_v;
}
degree[min_degree_edge_v1]--;
degree[min_degree_edge_v2]--;
}
void find_cycle_dfs(int curr_v, int parent, int cycle_len, int curr_depth, int &e) {
//cout << "cv "<<curr_v << ". Cycle len, Curr depth = " << cycle_len << " " << curr_depth << endl;
vis[curr_v] = true;
cycle_track.push_back(curr_v);
//cout << endl;
for (int i = 0; i < cycle_track.size(); i++) {
//cout << cycle_track[i] << " ";
}
//cout << endl;
for (int adj_v : graph[curr_v]) {
if (!mark[adj_v] and adj_v != parent) {
if (curr_depth <= cycle_len and !vis[adj_v]) {
find_cycle_dfs(adj_v, curr_v, cycle_len, curr_depth + 1, e);
} else if (curr_depth == cycle_len + 1 and vis[adj_v]) {
//cout << "* " << cycle_len << " " << curr_v <<endl;
spanner_sum += 2* (cycle_len - 1);
cycle_track.push_back(adj_v);
process_cycle();
e--;
cycle_track.pop_back();
}
}
}
//cout << "end"<<curr_v << endl;
vis[curr_v] = false;
cycle_track.pop_back();
}
void dfs_helper(int v, int &e) {
int cycle_len = 3;
while (e > v - 1) {
for (int i = 0; i < v; i++) {
//find_cycle_dfs(int curr_v, int parent, int cycle_len, int curr_depth) {
find_cycle_dfs(i, i ,cycle_len, 1, e);
}
cycle_len++;
}
}
int main() {
int v, e;
cin >> v >> e;
for (int i = 0; i < e; i++) {
int v1, v2;
cin >> v1 >> v2;
graph[v1].push_back(v2);
degree[v1]++;
graph[v2].push_back(v1);
degree[v2]++;
}
for(int i = 0; i < 10; i++) {
//cout << i << ": ";
for(int j: graph[i]) {
//cout << j << " ";
}
//cout << endl;
}
dfs_helper(v, e);
//cout << spanner_sum << endl;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PiBncmFwaFsxMDAxXTsKdmVjdG9yPGludD4gY3ljbGVfdHJhY2s7CgppbnQgZGVncmVlWzEwMDFdID0gezB9Owpib29sIHZpc1sxMDAxXSA9IHswfTsKYm9vbCBtYXJrWzEwMDFdID0gezB9OwoKaW50IHNwYW5uZXJfc3VtID0gMDsKCgp2b2lkIHByb2Nlc3NfY3ljbGUoKSB7CglpbnQgbWluX2RlZ3JlZV9lZGdlID0gMDsKCWludCBjdXJyX3YgPSBjeWNsZV90cmFja1swXTsKCWludCBtaW5fZGVncmVlX2VkZ2VfdjEgPSAwLCBtaW5fZGVncmVlX2VkZ2VfdjIgPSAwOwoJLy9jb3V0IDw8IGVuZGw7Cglmb3IgKGludCBpID0gMDsgaSA8IGN5Y2xlX3RyYWNrLnNpemUoKTsgaSsrKSB7CgkJLy9jb3V0IDw8IGN5Y2xlX3RyYWNrW2ldIDw8ICIgIjsKCX0KCS8vY291dCA8PCBlbmRsOwoJZm9yIChpbnQgaSA9IDE7IGkgPCBjeWNsZV90cmFjay5zaXplKCk7IGkrKykgewoJCW1hcmtbY3Vycl92XSA9IHRydWU7CgkJaW50IG5leHRfdiA9IGN5Y2xlX3RyYWNrW2ldOwoJCWludCBjdXJyX3ZfZGVncmVlID0gZGVncmVlW2N1cnJfdl07CgkJaW50IG5leHRfdl9kZWdyZWUgPSBkZWdyZWVbbmV4dF92XTsKCQlpZiAoY3Vycl92X2RlZ3JlZSArIG5leHRfdl9kZWdyZWUgPiBtaW5fZGVncmVlX2VkZ2UpIHsKCQkJbWluX2RlZ3JlZV9lZGdlID0gY3Vycl92X2RlZ3JlZSArIG5leHRfdl9kZWdyZWU7CgkJCW1pbl9kZWdyZWVfZWRnZV92MSA9IGN1cnJfdjsKCQkJbWluX2RlZ3JlZV9lZGdlX3YyID0gbmV4dF92OwoJCX0KCQljdXJyX3YgPSBuZXh0X3Y7Cgl9CglkZWdyZWVbbWluX2RlZ3JlZV9lZGdlX3YxXS0tOwoJZGVncmVlW21pbl9kZWdyZWVfZWRnZV92Ml0tLTsKfQoKCnZvaWQgZmluZF9jeWNsZV9kZnMoaW50IGN1cnJfdiwgaW50IHBhcmVudCwgaW50IGN5Y2xlX2xlbiwgaW50IGN1cnJfZGVwdGgsIGludCAmZSkgewoJLy9jb3V0IDw8ICJjdiAiPDxjdXJyX3YgPDwgIi4gQ3ljbGUgbGVuLCBDdXJyIGRlcHRoID0gIiA8PCBjeWNsZV9sZW4gPDwgIiAiIDw8IGN1cnJfZGVwdGggPDwgZW5kbDsKCXZpc1tjdXJyX3ZdID0gdHJ1ZTsKCWN5Y2xlX3RyYWNrLnB1c2hfYmFjayhjdXJyX3YpOwoJLy9jb3V0IDw8IGVuZGw7Cglmb3IgKGludCBpID0gMDsgaSA8IGN5Y2xlX3RyYWNrLnNpemUoKTsgaSsrKSB7CgkJLy9jb3V0IDw8IGN5Y2xlX3RyYWNrW2ldIDw8ICIgIjsKCX0KCS8vY291dCA8PCBlbmRsOwoJZm9yIChpbnQgYWRqX3YgOiBncmFwaFtjdXJyX3ZdKSB7CgkJaWYgKCFtYXJrW2Fkal92XSBhbmQgYWRqX3YgIT0gcGFyZW50KSB7CgkJCWlmIChjdXJyX2RlcHRoIDw9IGN5Y2xlX2xlbiBhbmQgIXZpc1thZGpfdl0pIHsKCQkJCWZpbmRfY3ljbGVfZGZzKGFkal92LCBjdXJyX3YsIGN5Y2xlX2xlbiwgY3Vycl9kZXB0aCArIDEsIGUpOwoJCQl9IGVsc2UgaWYgKGN1cnJfZGVwdGggPT0gY3ljbGVfbGVuICsgMSBhbmQgdmlzW2Fkal92XSkgewoJCQkJLy9jb3V0IDw8ICIqICIgPDwgY3ljbGVfbGVuIDw8ICIgIiA8PCBjdXJyX3YgPDxlbmRsOwkJCQkKCQkJCXNwYW5uZXJfc3VtICs9IDIqIChjeWNsZV9sZW4gLSAxKTsKCQkJCWN5Y2xlX3RyYWNrLnB1c2hfYmFjayhhZGpfdik7CgkJCQlwcm9jZXNzX2N5Y2xlKCk7CgkJCQllLS07CgkJCQljeWNsZV90cmFjay5wb3BfYmFjaygpOwoJCQl9CgkJfQoJfQoJLy9jb3V0IDw8ICJlbmQiPDxjdXJyX3YgPDwgZW5kbDsKCXZpc1tjdXJyX3ZdID0gZmFsc2U7CgljeWNsZV90cmFjay5wb3BfYmFjaygpOwp9CgoKdm9pZCBkZnNfaGVscGVyKGludCB2LCBpbnQgJmUpIHsKCWludCBjeWNsZV9sZW4gPSAzOwoJd2hpbGUgKGUgPiB2IC0gMSkgewoJCWZvciAoaW50IGkgPSAwOyBpIDwgdjsgaSsrKSB7Ci8vZmluZF9jeWNsZV9kZnMoaW50IGN1cnJfdiwgaW50IHBhcmVudCwgaW50IGN5Y2xlX2xlbiwgaW50IGN1cnJfZGVwdGgpIHsKCQkJZmluZF9jeWNsZV9kZnMoaSwgaSAsY3ljbGVfbGVuLCAxLCBlKTsKCQl9CgkJY3ljbGVfbGVuKys7Cgl9Cn0KCmludCBtYWluKCkgewoJaW50IHYsIGU7CgljaW4gPj4gdiA+PiBlOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBlOyBpKyspIHsKCQlpbnQgdjEsIHYyOwoJCWNpbiA+PiB2MSA+PiB2MjsKCQlncmFwaFt2MV0ucHVzaF9iYWNrKHYyKTsKCQlkZWdyZWVbdjFdKys7CgkJZ3JhcGhbdjJdLnB1c2hfYmFjayh2MSk7CgkJZGVncmVlW3YyXSsrOwoJfQoJZm9yKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKCQkvL2NvdXQgPDwgaSA8PCAiOiAiOwoJCWZvcihpbnQgajogZ3JhcGhbaV0pIHsKCQkJLy9jb3V0IDw8IGogPDwgIiAiOwoJCX0JCgkJLy9jb3V0IDw8IGVuZGw7Cgl9CglkZnNfaGVscGVyKHYsIGUpOwoJLy9jb3V0IDw8IHNwYW5uZXJfc3VtIDw8IGVuZGw7Cn0=