#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n";
#define no cout << "NO\n";
void FastIO(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
}
void solve(){
string str;
cin >> str;
int n = str.size();
if(n < 26){
cout << -1;
return;
}
bool ok = false;
int idx = -1;
for(int i = 0; i + 26 <= n; i++){
map<char,int> freq;
int qcnt = 0;
bool check = true;
for(int j = i; j < i + 26; j++){
if(str[j] != '?'){
freq[str[j]]++;
if(freq[str[j]] > 1){
check = false;
break;
}
}
else qcnt++;
}
if(check && (int)freq.size() + qcnt == 26){
ok = true;
idx = i;
break;
}
}
if(!ok){
cout << -1;
return;
}
string res = str.substr(idx, 26);
int fr[26] = {0};
for(char c : res){
if(c != '?')
fr[c - 'A']++;
}
vector<char> remain;
for(int k = 0; k < 26; k++){
if(fr[k] == 0)
remain.push_back(char('A' + k));
}
int it = 0;
for(char &c : res){
if(c == '?')
c = remain[it++];
}
for(int j = 0; j < 26; j++){
str[idx + j] = res[j];
}
for(char &c : str){
if(c == '?') c = 'A';
}
cout << str;
}
signed main(){
FastIO();
int t = 1;
//cin >> t;
while (t--){
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIGludCBsb25nIGxvbmcKI2RlZmluZSB5ZXMgY291dCA8PCAiWUVTXG4iOwojZGVmaW5lIG5vIGNvdXQgPDwgIk5PXG4iOwoKCnZvaWQgRmFzdElPKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBjb3V0LnRpZShudWxscHRyKTsKfQoKdm9pZCBzb2x2ZSgpewogICAgc3RyaW5nIHN0cjsKICAgIGNpbiA+PiBzdHI7CgogICAgaW50IG4gPSBzdHIuc2l6ZSgpOwoKICAgIGlmKG4gPCAyNil7CiAgICAgICAgY291dCA8PCAtMTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgYm9vbCBvayA9IGZhbHNlOwogICAgaW50IGlkeCA9IC0xOwoKICAgIGZvcihpbnQgaSA9IDA7IGkgKyAyNiA8PSBuOyBpKyspewogICAgICAgIG1hcDxjaGFyLGludD4gZnJlcTsKICAgICAgICBpbnQgcWNudCA9IDA7CiAgICAgICAgYm9vbCBjaGVjayA9IHRydWU7CgogICAgICAgIGZvcihpbnQgaiA9IGk7IGogPCBpICsgMjY7IGorKyl7CiAgICAgICAgICAgIGlmKHN0cltqXSAhPSAnPycpewogICAgICAgICAgICAgICAgZnJlcVtzdHJbal1dKys7CiAgICAgICAgICAgICAgICBpZihmcmVxW3N0cltqXV0gPiAxKXsKICAgICAgICAgICAgICAgICAgICBjaGVjayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgcWNudCsrOwogICAgICAgIH0KCiAgICAgICAgaWYoY2hlY2sgJiYgKGludClmcmVxLnNpemUoKSArIHFjbnQgPT0gMjYpewogICAgICAgICAgICBvayA9IHRydWU7CiAgICAgICAgICAgIGlkeCA9IGk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICBpZighb2spewogICAgICAgIGNvdXQgPDwgLTE7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHN0cmluZyByZXMgPSBzdHIuc3Vic3RyKGlkeCwgMjYpOwogICAgaW50IGZyWzI2XSA9IHswfTsKICAgIGZvcihjaGFyIGMgOiByZXMpewogICAgICAgIGlmKGMgIT0gJz8nKQogICAgICAgICAgICBmcltjIC0gJ0EnXSsrOwogICAgfQoKICAgIHZlY3RvcjxjaGFyPiByZW1haW47CiAgICBmb3IoaW50IGsgPSAwOyBrIDwgMjY7IGsrKyl7CiAgICAgICAgaWYoZnJba10gPT0gMCkKICAgICAgICAgICAgcmVtYWluLnB1c2hfYmFjayhjaGFyKCdBJyArIGspKTsKICAgIH0KCiAgICBpbnQgaXQgPSAwOwogICAgZm9yKGNoYXIgJmMgOiByZXMpewogICAgICAgIGlmKGMgPT0gJz8nKQogICAgICAgICAgICBjID0gcmVtYWluW2l0KytdOwogICAgfQoKICAgIGZvcihpbnQgaiA9IDA7IGogPCAyNjsgaisrKXsKICAgICAgICBzdHJbaWR4ICsgal0gPSByZXNbal07CiAgICB9CgogICAgZm9yKGNoYXIgJmMgOiBzdHIpewogICAgICAgIGlmKGMgPT0gJz8nKSBjID0gJ0EnOwogICAgfQoKICAgIGNvdXQgPDwgc3RyOwp9CgoKc2lnbmVkIG1haW4oKXsKICAgIEZhc3RJTygpOwoKICAgIGludCB0ID0gMTsKICAgIC8vY2luID4+IHQ7CgogICAgd2hpbGUgKHQtLSl7CiAgICAgICAgc29sdmUoKTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==