#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
int n;
vector<int> e[N];
int q[N], f[N], vis[N], size[N], max_size[N];
int find(int u) {
  int t = 1;
  f[u] = -1, q[0] = u;
  for (int h = (0); h < (t); ++h) {
    u = q[h];
    size[u] = 1, max_size[u] = 0;
    for (int i = (0); i < (((int)(e[u]).size())); ++i) {
      int v = e[u][i];
      if (vis[v] || v == f[u]) continue;
      f[v] = u, q[t++] = v;
    }
  }
  for (int h = t - 1; h >= 0; --h) {
    u = q[h];
    max_size[u] = max(max_size[u], t - size[u]);
    if (max_size[u] * 2 <= t) return u;
    if (~f[u]) {
      size[f[u]] += size[u];
      max_size[f[u]] = max(max_size[f[u]], size[u]);
    }
  }
  return 0;
}
int _rank[N];
void solve(int u, int dep) {
  u = find(u);
  vis[u] = true, _rank[u] = dep;
  for (int i = (0); i < (((int)(e[u]).size())); ++i) {
    int v = e[u][i];
    if (vis[v]) continue;
    solve(v, dep + 1);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = (1); i < (n); ++i) {
    int u, v;
    scanf("%d%d", &u, &v);
    --u, --v;
    e[u].push_back(v);
    e[v].push_back(u);
  }
  solve(0, 0);
  if (*max_element(_rank, _rank + n) > 25) {
    puts("Impossible!");
  } else {
    for (int i = (0); i < (n); ++i) {
      if (i) putchar(' ');
      printf("%c", 'A' + _rank[i]);
    }
  }
  return 0;
}
