#include <bits/stdc++.h>
using namespace std;
char a[200];
int used[26];
int main() {
  int k, i, j, cnt = 0, g, l, h, ss;
  scanf("%d", &k);
  g = k;
  gets(a);
  gets(a);
  for (i = 0, j = strlen(a) - 1; i < strlen(a); i++, j--) {
    if (a[i] != '?' && a[j] != '?' && a[i] != a[j]) goto fail;
    if (a[i] == '?' && a[j] != '?') {
      a[i] = a[j];
    }
    if (a[j] == '?' && a[i] != '?') {
      a[j] = a[i];
    }
    if (a[i] != '?' && used[a[i] - 'a'] != 1) {
      used[a[i] - 'a'] = 1;
      g--;
    }
  }
  for (i = 0; i <= (strlen(a) - 1) / 2; i++) {
    if (a[i] == '?') {
      cnt++;
    }
  }
  if (g > cnt) goto fail;
  if (cnt == 0) goto ans;
  l = cnt - g;
  h = 0;
  for (i = 0, j = strlen(a) - 1; i <= (strlen(a) - 1) / 2 && h < l; i++, j--) {
    if (a[i] == '?') {
      a[i] = a[j] = 'a';
      h++;
    }
  }
  for (ss = 0; ss < k; ss++) {
    if (used[ss] == 0) break;
  }
  for (; i <= (strlen(a) - 1) / 2; i++, j--) {
    if (a[i] == '?') {
      a[i] = a[j] = ss + 'a';
      used[ss] = 1;
      for (; ss < k; ss++)
        if (used[ss] == 0) break;
    }
  }
ans:
  printf("%s", a);
  return 0;
fail:
  printf("IMPOSSIBLE");
  return 0;
}
