#include <bits/stdc++.h>
char a[110];
int t[26];
int n;
int change(int s, int e) {
  int i;
  int flag = 0;
  for (i = 0; i < n; i++) {
    if (t[i] == 0) {
      t[i] = 1;
      a[s] = 'a' + i;
      a[e] = 'a' + i;
      flag = 1;
      break;
    }
  }
  if (flag == 0) a[s] = a[e] = 'a';
  return flag;
}
int check() {
  int i, flag;
  flag = 1;
  for (i = 0; i < n; i++) {
    if (t[i] == 0) {
      flag = 0;
      break;
    }
  }
  return flag;
}
int main() {
  int i, j, m, p;
  int flag, total;
  while (scanf("%d", &n) != EOF) {
    getchar();
    for (i = 0; i < n; i++) t[i] = 0;
    gets(a);
    m = total = 0;
    j = strlen(a) - 1;
    flag = 1;
    for (i = 0; i <= j; i++, j--) {
      if (a[i] == '?' && a[j] == '?') {
        m++;
      } else if (a[i] != '?' && a[j] == '?') {
        a[j] = a[i];
      } else if (a[i] == '?' && a[j] != '?') {
        a[i] = a[j];
      }
      if (a[i] != '?') {
        if (a[i] - 'a' < n && t[a[i] - 'a'] == 0) {
          total++;
          t[a[i] - 'a'] = 1;
        } else if (a[i] - 'a' >= n) {
          flag = 0;
          break;
        }
      }
    }
    j = strlen(a) - 1;
    p = 0;
    for (i = 0; i <= j && flag; i++, j--) {
      if (a[i] == '?' && a[j] == '?') {
        if (p < m - (n - total)) {
          a[i] = a[j] = 'a';
          p++;
        } else
          change(i, j);
      } else if (a[i] == '?' && a[j] != '?') {
        if (a[j] - 'a' + 1 > n) {
          flag = 0;
          break;
        } else {
          a[i] = a[j];
        }
      } else if (a[i] != '?' && a[j] == '?') {
        if (a[i] - 'a' + 1 > n) {
          flag = 0;
        } else {
          a[j] = a[i];
        }
      } else if (a[i] != '?' && a[j] != '?') {
        if (a[i] != a[j]) {
          flag = 0;
        }
      }
    }
    if (flag == 1 && check())
      printf("%s\n", a);
    else
      printf("IMPOSSIBLE\n");
  }
  return 0;
}
