#include <bits/stdc++.h>
using namespace std;
long long a[1000010], b[1000], d[100010][26], p[10010];
long long mn = 1e18, mx = -1e18, ans, cnt, sm = 1, n, m;
bool ok, okk, u[1000010], uu[310][310], uk[1000010];
char ck[510][510], ch[100010];
int dx[4] = {0, 1, 0, -1}, dy[4] = {-1, 0, 1, 0};
vector<int> g[900010];
int main() {
  cin >> n;
  string s;
  cin >> s;
  int mid = s.size() / 2;
  for (int i = 0; i < s.size(); i++) {
    if (islower(s[i])) {
      a[s[i] - 'a'] = 1;
    }
  }
  cnt = -1;
  if (s.size() % 2 == 1) {
    if (s[mid] == '?') {
      for (int i = n - 1; i >= 0; i--) {
        if (a[i] == 0) {
          cnt = i;
          break;
        }
      }
      cnt = max(cnt, 0 * 1LL);
      s[mid] = char(cnt + 'a');
      a[cnt] = 1;
    }
  }
  mid--;
  for (int i = mid; i >= 0; i--) {
    if (s[i] == '?' && s[s.size() - i - 1] == '?') {
      for (int j = n - 1; j >= 0; j--) {
        if (a[j] == 0) {
          s[i] = char(j + 'a');
          s[s.size() - i - 1] = char(j + 'a');
          a[j] = 1;
          break;
        }
      }
    }
  }
  for (int i = 0; i <= mid; i++) {
    if (s[i] == '?') {
      s[i] = s[s.size() - i - 1];
    }
    if (s[s.size() - i - 1] == '?') {
      s[s.size() - i - 1] = s[i];
    }
  }
  for (int i = 0; i < n; i++) {
    if (a[i] == 0) {
      cout << "IMPOSSIBLE";
      return 0;
    }
  }
  for (int i = 0; i <= mid; i++) {
    if (s[i] != s[s.size() - i - 1]) {
      cout << "IMPOSSIBLE";
      return 0;
    }
  }
  for (int i = 0; i < 26; i++) {
    if (a[i] && i >= n) {
      cout << "IMPOSSIBLE";
      return 0;
    }
  }
  for (int i = 0; i < s.size(); i++) {
    if (s[i] == '?') {
      s[i] = 'a';
    }
  }
  cout << s << endl;
  return 0;
}
