#include<bits/stdc++.h>
using
namespace
std;
class
Node {
public
:
vector<Node*> children;
int
val;
Node(
int
val)
{
this
->val = val;
}
};
vector<Node*> CAcount(Node* root, set<Node*> st)
{
if
(st.count(root)) {
vector<Node*> res(2, NULL);
res[0] = root;
res[1] =
new
Node(1);
return
res;
}
if
(root->children.size() == 0) {
vector<Node*> res(2, NULL);
return
res;
}
int
childCount = 0;
vector<Node*> ans(2, NULL);
for
(
auto
child: root->children){
vector<Node*> res = CAcount(child, st);
if
(res[0] != NULL)
childCount++;
if
(childCount == 1 && ans[0] == NULL) {
ans = res;
}
else
if
(childCount > 1) {
ans[0] = root;
ans[1] =
new
Node(1);
return
ans;
}
}
if
(ans[0] != NULL)
ans[1]->val++;
return
ans;
}
int
numberOfAncestors(Node* root, vector<Node*> nodes)
{
set<Node*> st;
for
(
auto
curr: nodes){
st.insert(curr);
}
return
CAcount(root, st)[1]->val;
}
int
main()
{
Node* zero =
new
Node(0);
Node* one =
new
Node(1);
Node* two =
new
Node(2);
Node* three =
new
Node(3);
Node* four =
new
Node(4);
Node* five =
new
Node(5);
Node* six =
new
Node(6);
Node* seven =
new
Node(7);
zero->children.push_back(one);
zero->children.push_back(two);
zero->children.push_back(three);
one->children.push_back(four);
one->children.push_back(five);
five->children.push_back(six);
five->children.push_back(seven);
vector<Node*> nodes;
nodes.push_back(four);
nodes.push_back(six);
nodes.push_back(seven);
cout << numberOfAncestors(zero, nodes) << endl;
return
0;
}