#include <bits/stdc++.h>
const int N = 100010;
const int inf = 0x3f3f3f3f;
using namespace std;
int n, cnt[27];
char a[N];
int main() {
  scanf("%d", &n);
  scanf("%s", a);
  int l = strlen(a), f = 1;
  for (int i = 0; i < (l + 1) / 2; i++) {
    if (a[i] == '?' && a[l - i - 1] == '?')
      a[i] = a[l - i - 1] = '?';
    else if (a[i] == '?')
      a[i] = a[l - i - 1];
    else if (a[l - i - 1] == '?')
      a[l - i - 1] = a[i];
    else if (a[i] != a[l - i - 1])
      f = 0;
  }
  if (f == 0) {
    puts("IMPOSSIBLE");
    return 0;
  }
  for (int i = 0; i < (l + 1) / 2; i++)
    if (a[i] != '?') cnt[a[i] - 'a'] = 1;
  int c = 0;
  for (int i = 0; i < n; i++) c += cnt[i];
  if (c == n) {
    for (int i = 0; i < (l + 1) / 2; i++)
      if (a[i] == '?') a[i] = 'a';
  } else {
    for (int i = (l + 1) / 2 - 1; i >= 0; i--) {
      if (a[i] - '?') continue;
      if (c == n) {
        a[i] = 'a';
        continue;
      }
      for (int j = n - 1; j >= 0; j--)
        if (cnt[j] == 0) {
          cnt[j] = 1, a[i] = 'a' + j, c++;
          break;
        }
    }
  }
  if (c - n) return puts("IMPOSSIBLE"), 0;
  for (int i = l - 1, j = 0; i >= (l + 1) / 2; i--) a[i] = a[j++];
  for (int i = 0; i < l; i++) printf("%c", a[i]);
  puts("");
  return 0;
}
