#include <bits/stdc++.h>
using namespace std;
template <typename T>
T gcd(T x, T y) {
  if (x < y) swap(x, y);
  while (y > 0) {
    T f = x % y;
    x = y;
    y = f;
  }
  return x;
}
const int maxn = 200005;
int n;
int a[maxn];
int dp[maxn];
vector<int> adj[maxn];
void dfs(int u, int p, set<int> gcd0, set<int> gcd1) {
  dp[u] = *gcd0.rbegin();
  if (!gcd1.empty()) {
    dp[u] = max(dp[u], *gcd1.rbegin());
  }
  for (int v : adj[u]) {
    if (v != p) {
      set<int> g0;
      set<int> g1 = gcd0;
      for (auto x : gcd0) g0.insert(gcd(x, a[v]));
      for (auto x : gcd1) g1.insert(gcd(x, a[v]));
      dfs(v, u, g0, g1);
    }
  }
}
int main(int argc, char *argv[]) {
  std::cin.sync_with_stdio(false);
  std::cin.tie(nullptr);
  cin >> n;
  {
    for (int i = 1; i <= n; i++) cin >> a[i], dp[i] = i;
    for (int i = 1; i < n; i++) {
      int x, y;
      cin >> x >> y;
      adj[x].push_back(y);
      adj[y].push_back(x);
    }
    set<int> gcd0;
    set<int> gcd1;
    gcd0.insert(a[1]);
    gcd1.insert(0);
    dfs(1, 0, gcd0, gcd1);
    for (int i = 1; i <= n; i++) {
      cout << dp[i] << (i == n ? "\n" : " ");
    }
  }
  return 0;
}
