#include #include using namespace std ; vector> edges ; vector val, done ; int n, maxval ; int primes[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97} ; int gcd(int a, int b) { if (b < a) swap(a, b) ; if (a == 0) return b ; return gcd(b % a, a) ; } vector recur(int a) { done[a] = 1 ; vector r(maxval) ; for (int i=2; i> n ; val.resize(n) ; edges.resize(n) ; done.resize(n) ; vector v ; for (auto &v: val) cin >> v ; for (int i=1; i> a >> b ; a-- ; b-- ; edges[a].push_back(b) ; edges[b].push_back(a) ; } int root = (int)(n*drand48()) ; maxval = max(101, 2 * n + 1) ; auto rv = recur(root) ; int r = rv[2] ; for (int i=3; i