#include <bits/stdc++.h>
int main() {
  int usa[30];
  int i, j, k, kk, jj, pod, comp;
  char texto[200];
  i = 0;
  memset(usa, 0, sizeof(usa));
  scanf("%d ", &k);
  scanf("%s", texto);
  kk = strlen(texto);
  pod = 1;
  comp = 0;
  for (j = 0; (j < (kk + 1) / 2) && pod; j++) {
    jj = kk - j - 1;
    if (texto[j] != '?' && texto[jj] != '?' && texto[j] != texto[jj])
      pod = 0;
    else if (texto[j] == '?' && texto[jj] == '?') {
      comp++;
    } else if (texto[j] != '?' && texto[jj] != '?') {
      usa[texto[j] - 'a'] = 1;
    } else if (texto[j] != '?') {
      texto[jj] = texto[j];
      usa[texto[j] - 'a'] = 1;
    } else {
      texto[j] = texto[jj];
      usa[texto[j] - 'a'] = 1;
    }
  }
  int prec = 0;
  for (i = 0; i < k; i++) {
    if (usa[i] == 0) prec++;
  }
  if (pod == 0 || prec > comp) {
    printf("IMPOSSIBLE\n");
  } else {
    comp -= prec;
    int pp = 0;
    for (j = 0; (j < (kk + 1) / 2) && pod; j++) {
      jj = kk - j - 1;
      if (texto[j] == '?' && texto[jj] == '?') {
        if (comp) {
          texto[j] = texto[jj] = 'a';
          comp--;
        } else {
          while (usa[pp] == 1) {
            pp++;
          }
          usa[pp] = 1;
          texto[j] = texto[jj] = 'a' + pp;
        }
      }
    }
    for (j = 0; j < kk && pod; j++) {
      printf("%c", texto[j]);
    }
    printf("\n");
  }
}
