#include <bits/stdc++.h>
using namespace std;
signed long long tonum(string s) {
  stringstream in(s);
  signed long long x;
  in >> x;
  return x;
}
string tostr(signed long long n) {
  stringstream in;
  in << n;
  string x;
  in >> x;
  return x;
}
signed long long gcd(signed long long a, signed long long b) {
  while (1) {
    a = a % b;
    if (a == 0) return b;
    b = b % a;
    if (b == 0) return a;
  }
}
int main() {
  int N;
  string s;
  cin >> N;
  cin >> s;
  int len = (int)s.size();
  map<char, int> used;
  int marks = 0;
  for (int i = 0; i < (int)(s.size()); ++i) {
    if (s[i] == '?' && s[len - 1 - i] == '?') {
      marks++;
      continue;
    }
    if (s[i] == '?') {
      s[i] = s[len - 1 - i];
      continue;
    }
    if (s[len - 1 - i] == '?') {
      s[len - 1 - i] = s[i];
      continue;
    }
    if (s[i] != s[len - 1 - i]) {
      cout << "IMPOSSIBLE" << endl;
      return 0;
    }
  }
  int mid = (s.size() % 2 == 0) ? (s.size() / 2 - 1) : (s.size() / 2);
  char curr = N - 1 + 'a';
  for (int i = 0; i < (int)(s.size()); ++i) used[s[i]] = 1;
  for (int i = mid; i >= 0; --i) {
    if (s[i] == '?') {
      while (used[curr] == 1) curr--;
      if (curr < 'a') break;
      s[i] = s[len - 1 - i] = curr;
      used[curr] = 1;
    }
  }
  for (int i = 0; i < (int)(s.size()); ++i)
    if (s[i] == '?') s[i] = s[len - 1 - i] = 'a';
  for (int i = 0; i < (int)(s.size()); ++i) used[s[i]] = 1;
  int req = 0, use = 0;
  for (int i = 0; i < (int)(N); ++i)
    if (used[char(i + 'a')] == 1) req++;
  for (int i = 0; i < (int)(26); ++i)
    if (used[char(i + 'a')] == 1) use++;
  if (req != N || req != use) {
    cout << "IMPOSSIBLE" << endl;
    return 0;
  }
  cout << s << endl;
  return 0;
}
