#include <bits/stdc++.h>
using namespace std;
int main() {
int n = 8;
vector<int> targets = {5, 6};
vector<pair<int, int>> edges = {
{1, 2}, {2, 5}, {2, 3}, {2, 6},
{1, 4}, {4, 7}, {7, 8}
};
// build graph
vector<vector<int>> g(n + 1);
for (auto [u, v] : edges) {
g[u].push_back(v);
g[v].push_back(u);
}
// bfs from root to get parent pointers
vector<int> par(n + 1, -1);
queue<int> q;
q.push(1);
par[1] = 0;
while (!q.empty()) {
int u = q.front();
q.pop();
for (int v : g[u]) {
if (par[v] == -1) {
par[v] = u;
q.push(v);
}
}
}
// walk up from each target to root, collecting all intermediate nodes
set<int> nodes;
nodes.insert(1);
for (int t : targets) {
nodes.insert(t);
while (t != 1 && t != 0) {
t = par[t];
nodes.insert(t);
}
}
// if there's just one node, we don't move
if (nodes.size() == 1) {
cout << 0 << endl;
return 0;
}
// each edge needs to be traversed twice (down and back up)
int result = 2 * (nodes.size() - 1);
cout << result << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIGludCBuID0gODsKICAgIHZlY3RvcjxpbnQ+IHRhcmdldHMgPSB7NSwgNn07CiAgICB2ZWN0b3I8cGFpcjxpbnQsIGludD4+IGVkZ2VzID0gewogICAgICAgIHsxLCAyfSwgezIsIDV9LCB7MiwgM30sIHsyLCA2fSwgCiAgICAgICAgezEsIDR9LCB7NCwgN30sIHs3LCA4fQogICAgfTsKICAgIAogICAgLy8gYnVpbGQgZ3JhcGgKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gZyhuICsgMSk7CiAgICBmb3IgKGF1dG8gW3UsIHZdIDogZWRnZXMpIHsKICAgICAgICBnW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICBnW3ZdLnB1c2hfYmFjayh1KTsKICAgIH0KICAgIAogICAgLy8gYmZzIGZyb20gcm9vdCB0byBnZXQgcGFyZW50IHBvaW50ZXJzCiAgICB2ZWN0b3I8aW50PiBwYXIobiArIDEsIC0xKTsKICAgIHF1ZXVlPGludD4gcTsKICAgIHEucHVzaCgxKTsKICAgIHBhclsxXSA9IDA7CiAgICAKICAgIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICAgICAgaW50IHUgPSBxLmZyb250KCk7CiAgICAgICAgcS5wb3AoKTsKICAgICAgICBmb3IgKGludCB2IDogZ1t1XSkgewogICAgICAgICAgICBpZiAocGFyW3ZdID09IC0xKSB7CiAgICAgICAgICAgICAgICBwYXJbdl0gPSB1OwogICAgICAgICAgICAgICAgcS5wdXNoKHYpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICAvLyB3YWxrIHVwIGZyb20gZWFjaCB0YXJnZXQgdG8gcm9vdCwgY29sbGVjdGluZyBhbGwgaW50ZXJtZWRpYXRlIG5vZGVzCiAgICBzZXQ8aW50PiBub2RlczsKICAgIG5vZGVzLmluc2VydCgxKTsKICAgIAogICAgZm9yIChpbnQgdCA6IHRhcmdldHMpIHsKICAgICAgICBub2Rlcy5pbnNlcnQodCk7CiAgICAgICAgd2hpbGUgKHQgIT0gMSAmJiB0ICE9IDApIHsKICAgICAgICAgICAgdCA9IHBhclt0XTsKICAgICAgICAgICAgbm9kZXMuaW5zZXJ0KHQpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gaWYgdGhlcmUncyBqdXN0IG9uZSBub2RlLCB3ZSBkb24ndCBtb3ZlCiAgICBpZiAobm9kZXMuc2l6ZSgpID09IDEpIHsKICAgICAgICBjb3V0IDw8IDAgPDwgZW5kbDsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIAogICAgLy8gZWFjaCBlZGdlIG5lZWRzIHRvIGJlIHRyYXZlcnNlZCB0d2ljZSAoZG93biBhbmQgYmFjayB1cCkKICAgIGludCByZXN1bHQgPSAyICogKG5vZGVzLnNpemUoKSAtIDEpOwogICAgY291dCA8PCByZXN1bHQgPDwgZW5kbDsKICAgIAogICAgcmV0dXJuIDA7Cn0=