#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3fffffff;
const int N = 100005;
const int BOUND = 26;
vector<int> vec[N];
int low[N];
bool vis[N], success;
char ans[N];
void Dfs_1(int u, int fa, int& tot) {
  low[u] = 1;
  tot++;
  for (int k = 0; k < vec[u].size(); k++) {
    int v = vec[u][k];
    if (v == fa || vis[v] == true) continue;
    Dfs_1(v, u, tot);
    low[u] += low[v];
  }
}
void Dfs_2(int u, int fa, int& minv, int& minp, const int tot) {
  int maxv = tot - low[u];
  for (int k = 0; k < vec[u].size(); k++) {
    int v = vec[u][k];
    if (v == fa || vis[v] == true) continue;
    Dfs_2(v, u, minv, minp, tot);
    maxv = max(maxv, low[v]);
  }
  if (minv > maxv) {
    minv = maxv;
    minp = u;
  }
}
int FindCenter(int u) {
  int tot = 0;
  int minv = INF, minp = 0;
  Dfs_1(u, 0, tot);
  Dfs_2(u, 0, minv, minp, tot);
  return minp;
}
void Solve(int u, int no) {
  if (no >= BOUND) success = false;
  if (success == false) return;
  ans[u] = (char)('A' + no);
  vis[u] = true;
  for (int k = 0; k < vec[u].size(); k++) {
    int v = vec[u][k];
    if (vis[v] == true) continue;
    int nxt = FindCenter(v);
    Solve(nxt, no + 1);
  }
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1, u, v; i < n; i++) {
    scanf("%d %d", &u, &v);
    vec[u].push_back(v);
    vec[v].push_back(u);
  }
  success = true;
  int st = FindCenter(1);
  Solve(st, 0);
  if (success == false)
    puts("Impossible!");
  else {
    for (int i = 1; i <= n; i++) printf("%c ", ans[i]);
    puts("");
  }
  return 0;
}
