#include <bits/stdc++.h>
using namespace std;
char a[100010];
int flag[30], ans;
void init(int len) {
  for (int i = 0; i <= len / 2; i++) {
    if (a[i] == '?' && a[len - i - 1] != '?')
      a[i] = a[len - i - 1], flag[a[len - i - 1] - 'a'] = 1;
    if (a[i] != '?' && a[len - i - 1] == '?')
      a[len - i - 1] = a[i], flag[a[i] - 'a'] = 1;
    if (a[i] != '?' && a[len - i - 1] != '?') flag[a[i] - 'a'] = 1;
  }
  for (int i = 0; i < len / 2; i++) {
    if (a[i] != a[len - i - 1] && a[i] != '?') {
      ans = 1;
      return;
    }
  }
}
int getsum(int x) {
  int sum = 0;
  for (int i = 0; i < x; i++) sum += flag[i];
  return sum;
}
int first(int x) {
  int i;
  for (i = x - 1; i > 0; i--) {
    if (flag[i] == 0) return i;
  }
  return i;
}
int main() {
  int x, y, z, i, t;
  ans = 0;
  scanf("%d", &x);
  scanf("%s", a);
  int len = strlen(a);
  init(len);
  if (ans) {
    printf("IMPOSSIBLE\n");
    return 0;
  }
  for (i = len / 2; i >= 0; i--) {
    if (a[i] == '?') {
      z = first(x);
      a[i] = a[len - i - 1] = z + 'a';
      flag[z] = 1;
    }
  }
  if (getsum(x) == x)
    printf("%s\n", a);
  else
    printf("IMPOSSIBLE\n");
  return 0;
}
