#include <bits/stdc++.h>
using namespace std;
const int INF = 1 << 30;
int sub[111111], par[111111], level[111111], nn, root;
vector<int> g[111111], c[111111];
void calc_subtree(int u, int p) {
  sub[u] = 1;
  nn++;
  for (int i = 0; i < g[u].size(); i++) {
    int v = g[u][i];
    if (v != p && !par[v]) {
      calc_subtree(v, u);
      sub[u] += sub[v];
    }
  }
}
int calc_centroid(int u, int p) {
  for (int i = 0; i < g[u].size(); i++) {
    int v = g[u][i];
    if (v != p && !par[v] && sub[v] > nn / 2) return calc_centroid(v, u);
  }
  return u;
}
void CD(int u, int p) {
  nn = 0;
  calc_subtree(u, p);
  int centroid = calc_centroid(u, p);
  par[centroid] = p;
  if (p == -1) root = centroid;
  if (p != -1) c[p].push_back(centroid);
  for (int i = 0; i < g[centroid].size(); i++) {
    int v = g[centroid][i];
    if (!par[v]) CD(v, centroid);
  }
}
void calc_rank(int u, int p) {
  if (p != -1) level[u] = level[p] + 1;
  for (int i = 0; i < c[u].size(); i++) calc_rank(c[u][i], u);
}
int main() {
  int n, u, v;
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    scanf("%d %d", &u, &v);
    g[u].push_back(v);
    g[v].push_back(u);
  }
  CD(1, -1);
  calc_rank(root, -1);
  for (int i = 1; i <= n; i++) printf("%c ", level[i] + 65);
  printf("\n");
  return 0;
}
