#include <bits/stdc++.h>
using namespace std;
vector<int> q[100002];
struct node {
  int s[26];
  char c;
} p[100002];
void dfs(int x, int f) {
  int i, k;
  memset(p[x].s, 0, sizeof(p[x].s));
  for (i = 0; i < q[x].size(); i++) {
    int j = q[x][i];
    if (j == f) continue;
    dfs(j, x);
    for (k = 0; k < 26; k++) {
      p[x].s[k] += p[j].s[k];
    }
  }
  k = 26;
  for (i = 0; i < 26; i++) {
    if (p[x].s[i] >= 2) {
      k = i;
      break;
    }
  }
  for (i = k - 1; i >= 0; i--) {
    if (p[x].s[i] == 0) {
      p[x].c = i + 'A';
      p[x].s[i] = 1;
      break;
    }
  }
  i++;
  for (; i < 26; i++) {
    p[x].s[i] = 0;
  }
}
int main() {
  int n;
  while (scanf("%d", &n) != EOF) {
    int i;
    for (i = 0; i < n; i++) {
      q[i].clear();
    }
    for (i = 0; i < n - 1; i++) {
      int a, b;
      scanf("%d%d", &a, &b);
      a--;
      b--;
      q[a].push_back(b);
      q[b].push_back(a);
    }
    dfs(0, -1);
    for (i = 0; i < n; i++) {
      if (i) printf(" ");
      printf("%c", p[i].c);
    }
    printf("\n");
  }
  return 0;
}
