#include <bits/stdc++.h>
using namespace std;
long long m, n, x, y, z, p, q, r;
vector<long long> edges[100009], centroidedges[100009];
long long sz[100009], levels[100009];
bool isCentroid[100009];
void dfs(long long pos, long long par) {
  sz[pos] = 1;
  for (long long i = 0; i < edges[pos].size(); i++) {
    if (edges[pos][i] == par || isCentroid[edges[pos][i]]) continue;
    dfs(edges[pos][i], pos);
    sz[pos] += sz[edges[pos][i]];
  }
}
long long findcentroid(long long pos, long long par,
                       long long szofthissubtree) {
  bool flg = true;
  long long heaviestchild = -1;
  for (long long i = 0; i < edges[pos].size(); i++) {
    if (isCentroid[edges[pos][i]]) continue;
    long long mxtobe = szofthissubtree / 2;
    if (edges[pos][i] == par) {
      long long tmp = szofthissubtree - sz[pos];
      if (tmp > mxtobe) flg = false;
    } else {
      if (sz[edges[pos][i]] > mxtobe) {
        flg = false;
      }
      if (heaviestchild == -1) heaviestchild = edges[pos][i];
      if (sz[heaviestchild] < sz[edges[pos][i]]) heaviestchild = edges[pos][i];
    }
  }
  if (flg) {
    return pos;
  } else
    return findcentroid(heaviestchild, pos, szofthissubtree);
}
long long decompose(long long pos, long long par) {
  dfs(pos, par);
  long long centroid = findcentroid(pos, par, sz[pos]);
  isCentroid[centroid] = true;
  for (long long i = 0; i < edges[centroid].size(); i++) {
    if (isCentroid[edges[centroid][i]]) continue;
    long long cntr = decompose(edges[centroid][i], centroid);
    centroidedges[centroid].push_back(cntr);
  }
  return centroid;
}
void chk(long long pos) {
  cout << pos << ' ';
  for (long long i = 0; i < centroidedges[pos].size(); i++) {
    chk(centroidedges[pos][i]);
  }
  cout << pos << ' ';
}
void dfsafterdecompose(long long pos, long long lvl) {
  levels[pos] = lvl;
  for (long long i = 0; i < centroidedges[pos].size(); i++) {
    dfsafterdecompose(centroidedges[pos][i], lvl + 1);
  }
}
int main() {
  cin >> n;
  for (long long i = 1; i < n; i++) {
    scanf("%lld %lld", &x, &y);
    edges[x].push_back(y);
    edges[y].push_back(x);
  }
  long long tmp = decompose(1, 0);
  dfsafterdecompose(tmp, 0);
  for (long long i = 1; i <= n; i++) {
    printf("%c ", 'A' + levels[i]);
  }
  return 0;
}
