#include <bits/stdc++.h>
using namespace std;
queue<int> s2, b;
int main() {
  int n, i, j, len, temp, half, flag;
  int a[30];
  char s[110];
  flag = 0;
  cin >> n;
  cin >> s;
  len = strlen(s);
  memset(a, 0, sizeof(a));
  if (len % 2) {
    half = len / 2;
  } else {
    half = len / 2 - 1;
  }
  for (i = 0; i <= half; i++) {
    if (s[i] == '?' && s[len - 1 - i] != '?' ||
        s[i] != '?' && s[len - 1 - i] == '?') {
      if (s[i] != '?') {
        s[len - 1 - i] = s[i];
      } else {
        s[i] = s[len - 1 - i];
      }
      a[s[i] - 'a'] = 1;
    } else if (s[i] == '?' && s[len - 1 - i] == '?') {
      s2.push(i);
    } else if (s[i] != '?' && s[len - 1 - i] != '?') {
      if (s[i] != s[len - 1 - i]) flag = 1;
      a[s[i] - 'a'] = 1;
    }
  }
  for (i = 0; i < n; i++) {
    if (a[i] == 0) {
      b.push(i);
    }
  }
  if (s2.size() < b.size() || flag) {
    printf("IMPOSSIBLE\n");
    return 0;
  }
  while (s2.size() > b.size()) {
    temp = s2.front();
    s2.pop();
    s[temp] = s[len - 1 - temp] = 'a';
  }
  while (s2.size()) {
    temp = s2.front();
    s2.pop();
    s[temp] = s[len - 1 - temp] = b.front() + 'a';
    b.pop();
  }
  cout << s << endl;
  return 0;
}
