#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
#include <iomanip>
using namespace std;
#define ll long long
#define ld long double
const ll MAXN = 1e6 + 5;
ll spf[MAXN];
ll power(ll base, ll exp, ll mod)
{
if (exp == 0)
return 1 % mod;
ll half = power(base, exp / 2, mod);
ll ans = (half * half) % mod;
if (exp % 2 == 1)
ans = (ans * base) % mod;
return ans;
}
ll gcd(ll a, ll b)
{
if (b == 0)
return a;
return gcd(b, a % b);
}
ll lcm(ll a, ll b)
{
return a / gcd(a, b) * b;
}
void sieve()
{
for (int i = 1; i < MAXN; i++)
spf[i] = i;
for (int p = 2; p * p < MAXN; p++)
{
if (spf[p] == p)
{
for (int i = p * p; i < MAXN; i += p)
{
if (spf[i] == i)
spf[i] = p;
}
}
}
}
vector<pair<ll, ll>> primeFactorization(ll x)
{
vector<pair<ll, ll>> factors;
while (x > 1)
{
ll prime = spf[x];
ll count = 0;
while (x % prime == 0)
{
count++;
x /= prime;
}
factors.emplace_back(prime, count);
}
return factors;
}
void generateDivisors(const vector<pair<ll, ll>> &factors, vector<ll> &divisors, ll current = 1, int index = 0)
{
if (index == factors.size())
{
divisors.push_back(current);
return;
}
ll prime = factors[index].first;
ll exp = factors[index].second;
for (int i = 0; i <= exp; i++)
{
generateDivisors(factors, divisors, current, index + 1);
current *= prime;
}
}
vector<int> prefixSum(vector<int> v)
{
vector<int> vc(v.size());
vc[0] = v[0];
for (int i = 1; i < v.size(); i++)
{
vc[i] = vc[i - 1] + v[i];
}
return vc;
}
ld Gamma(ld n)
{
return tgammal(n);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
string s;
cin>> s;
bool flag=true;
for(int i=0;i< s.length();i++)
{
if(s[i] == '?')
{
s[i]=s[s.length()-i -1];
}
if((s.length() % 2 != 0) && s[s.length()/2]=='?')
{
s[s.length() / 2] = 'a';
}
}
for(int i=0;i<s.length()/2;i++)
{
if(s[i] != s[s.length()-i - 1])
{
flag=false;
break;
}
}
if(flag)
{
cout<< s<<'\n';
}
else
{
cout<<-1<<'\n';
}
return 0;
}
I2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUwojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGUgPGlvbWFuaXA+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGxkIGxvbmcgZG91YmxlCmNvbnN0IGxsIE1BWE4gPSAxZTYgKyA1OwpsbCBzcGZbTUFYTl07CgpsbCBwb3dlcihsbCBiYXNlLCBsbCBleHAsIGxsIG1vZCkKewogICAgaWYgKGV4cCA9PSAwKQogICAgICAgIHJldHVybiAxICUgbW9kOwoKICAgIGxsIGhhbGYgPSBwb3dlcihiYXNlLCBleHAgLyAyLCBtb2QpOwogICAgbGwgYW5zID0gKGhhbGYgKiBoYWxmKSAlIG1vZDsKCiAgICBpZiAoZXhwICUgMiA9PSAxKQogICAgICAgIGFucyA9IChhbnMgKiBiYXNlKSAlIG1vZDsKCiAgICByZXR1cm4gYW5zOwp9CgpsbCBnY2QobGwgYSwgbGwgYikKewogICAgaWYgKGIgPT0gMCkKICAgICAgICByZXR1cm4gYTsKICAgIHJldHVybiBnY2QoYiwgYSAlIGIpOwp9CgpsbCBsY20obGwgYSwgbGwgYikKewogICAgcmV0dXJuIGEgLyBnY2QoYSwgYikgKiBiOwp9Cgp2b2lkIHNpZXZlKCkKewogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBNQVhOOyBpKyspCiAgICAgICAgc3BmW2ldID0gaTsKCiAgICBmb3IgKGludCBwID0gMjsgcCAqIHAgPCBNQVhOOyBwKyspCiAgICB7CiAgICAgICAgaWYgKHNwZltwXSA9PSBwKQogICAgICAgIHsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IHAgKiBwOyBpIDwgTUFYTjsgaSArPSBwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoc3BmW2ldID09IGkpCiAgICAgICAgICAgICAgICAgICAgc3BmW2ldID0gcDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKdmVjdG9yPHBhaXI8bGwsIGxsPj4gcHJpbWVGYWN0b3JpemF0aW9uKGxsIHgpCnsKICAgIHZlY3RvcjxwYWlyPGxsLCBsbD4+IGZhY3RvcnM7CiAgICB3aGlsZSAoeCA+IDEpCiAgICB7CiAgICAgICAgbGwgcHJpbWUgPSBzcGZbeF07CiAgICAgICAgbGwgY291bnQgPSAwOwoKICAgICAgICB3aGlsZSAoeCAlIHByaW1lID09IDApCiAgICAgICAgewogICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICB4IC89IHByaW1lOwogICAgICAgIH0KICAgICAgICBmYWN0b3JzLmVtcGxhY2VfYmFjayhwcmltZSwgY291bnQpOwogICAgfQogICAgcmV0dXJuIGZhY3RvcnM7Cn0KCnZvaWQgZ2VuZXJhdGVEaXZpc29ycyhjb25zdCB2ZWN0b3I8cGFpcjxsbCwgbGw+PiAmZmFjdG9ycywgdmVjdG9yPGxsPiAmZGl2aXNvcnMsIGxsIGN1cnJlbnQgPSAxLCBpbnQgaW5kZXggPSAwKQp7CiAgICBpZiAoaW5kZXggPT0gZmFjdG9ycy5zaXplKCkpCiAgICB7CiAgICAgICAgZGl2aXNvcnMucHVzaF9iYWNrKGN1cnJlbnQpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGxsIHByaW1lID0gZmFjdG9yc1tpbmRleF0uZmlyc3Q7CiAgICBsbCBleHAgPSBmYWN0b3JzW2luZGV4XS5zZWNvbmQ7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gZXhwOyBpKyspCiAgICB7CiAgICAgICAgZ2VuZXJhdGVEaXZpc29ycyhmYWN0b3JzLCBkaXZpc29ycywgY3VycmVudCwgaW5kZXggKyAxKTsKICAgICAgICBjdXJyZW50ICo9IHByaW1lOwogICAgfQp9Cgp2ZWN0b3I8aW50PiBwcmVmaXhTdW0odmVjdG9yPGludD4gdikKewogICAgdmVjdG9yPGludD4gdmModi5zaXplKCkpOwogICAgdmNbMF0gPSB2WzBdOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCB2LnNpemUoKTsgaSsrKQogICAgewogICAgICAgIHZjW2ldID0gdmNbaSAtIDFdICsgdltpXTsKICAgIH0KCiAgICByZXR1cm4gdmM7Cn0KCmxkIEdhbW1hKGxkIG4pCnsKICAgIHJldHVybiB0Z2FtbWFsKG4pOwp9CgppbnQgbWFpbigpCnsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICAKICAgIHN0cmluZyBzOwogICAgY2luPj4gczsKCiAgICBib29sIGZsYWc9dHJ1ZTsKCiAgICBmb3IoaW50IGk9MDtpPCBzLmxlbmd0aCgpO2krKykKICAgIHsKICAgICAgICBpZihzW2ldID09ICc/JykKICAgICAgICB7CiAgICAgICAgICAgIHNbaV09c1tzLmxlbmd0aCgpLWkgLTFdOyAKICAgICAgICB9CiAgICAgICAgaWYoKHMubGVuZ3RoKCkgJSAyICE9IDApICYmIHNbcy5sZW5ndGgoKS8yXT09Jz8nKQogICAgICAgIHsKICAgICAgICAgICAgc1tzLmxlbmd0aCgpIC8gMl0gPSAnYSc7CiAgICAgICAgfQogICAgfQoKICAgIGZvcihpbnQgaT0wO2k8cy5sZW5ndGgoKS8yO2krKykKICAgIHsKICAgICAgICBpZihzW2ldICE9IHNbcy5sZW5ndGgoKS1pIC0gMV0pCiAgICAgICAgewogICAgICAgICAgICBmbGFnPWZhbHNlOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgaWYoZmxhZykKICAgIHsKICAgICAgICBjb3V0PDwgczw8J1xuJzsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBjb3V0PDwtMTw8J1xuJzsKICAgIH0gCiAgICByZXR1cm4gMDsKfQ==