func_code_string: #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;   }   