#include <bits/stdc++.h>
using namespace std;
int freq[30];
set<int> dues;
set<int>::iterator it;
int main() {
  int k;
  scanf("%d", &k);
  int len;
  char str[105];
  char strfin[105];
  scanf("%s", str);
  memset(freq, 0, sizeof(freq));
  len = strlen(str);
  int upto = len / 2;
  if ((len & 1) == 0) upto--;
  int i;
  for (i = 0; i < len; i++) {
    if (str[i] != '?') freq[str[i] - 'a']++;
  }
  int gaps = 0;
  int missing = 0;
  k--;
  for (i = 0; i <= k; i++) {
    if (freq[i] == 0) {
      dues.insert(i);
      missing++;
    }
  }
  for (i = 0; i <= upto; i++) {
    if (str[i] == '?' && str[len - i - 1] == '?') gaps++;
  }
  for (i = 0; i <= upto; i++) {
    if (str[i] == '?' && str[len - i - 1] == '?') {
      if ((gaps - 1) >= missing) {
        strfin[i] = 'a';
        strfin[len - i - 1] = 'a';
      } else {
        it = dues.begin();
        char what = 'a' + *it;
        strfin[i] = what;
        strfin[len - i - 1] = what;
        dues.erase(it);
        missing--;
      }
      gaps--;
    } else if (str[i] == '?') {
      strfin[i] = str[len - i - 1];
      strfin[len - i - 1] = str[len - i - 1];
    } else if (str[len - i - 1] == '?') {
      strfin[i] = str[i];
      strfin[len - i - 1] = str[i];
    } else {
      strfin[i] = str[i];
      strfin[len - i - 1] = str[len - i - 1];
    }
  }
  bool flag = true;
  for (i = 0; i <= upto; i++) {
    if (strfin[i] != strfin[len - i - 1]) {
      flag = false;
      break;
    }
  }
  if (flag) {
    memset(freq, 0, sizeof(freq));
    for (i = 0; i < len; i++) {
      freq[strfin[i] - 'a']++;
    }
    for (i = 0; i <= k; i++) {
      if (freq[i] == 0) {
        flag = false;
        break;
      }
    }
  }
  strfin[len] = 0;
  if (!flag)
    printf("IMPOSSIBLE\n");
  else
    printf("%s\n", strfin);
  return 0;
}
