#include <bits/stdc++.h>
using namespace std;
string str;
map<char, int> mp;
queue<char> qu;
bool check() {
  int cnt = 0;
  for (int i = 0; i < 26; i++) {
    if (mp['A' + i] == 1) cnt++;
  }
  if ((cnt + mp['?']) == 26)
    return true;
  else
    return false;
}
int main() {
  cin >> str;
  if (str.size() < 26) {
    printf("-1\n");
    return 0;
  }
  bool f = false;
  for (int i = 0; i < 26; i++) {
    mp[str[i]]++;
  }
  if (check()) {
    for (int i = 0; i < 26; i++) {
      if (mp[i + 'A'] == 0) qu.push(i + 'A');
    }
    for (int i = 0; i < 26; i++) {
      if (str[i] == '?') {
        str[i] = qu.front();
        qu.pop();
      }
    }
    f = true;
  }
  for (int i = 26; i < str.size(); i++) {
    if (f) {
      for (int j = 0; j < str.size(); j++) {
        if (str[j] == '?') str[j] = 'A';
      }
      break;
    }
    mp[str[i - 26]]--;
    mp[str[i]]++;
    if (check()) {
      for (int k = 0; k < 26; k++) {
        if (mp[k + 'A'] == 0) qu.push(k + 'A');
      }
      for (int j = i - 25; j <= i; j++) {
        if (str[j] == '?') {
          str[j] = qu.front();
          qu.pop();
        }
      }
      f = true;
    }
  }
  if (f) {
    for (int j = 0; j < str.size(); j++) {
      if (str[j] == '?') str[j] = 'A';
    }
  }
  if (!f)
    printf("-1\n");
  else
    cout << str;
  return 0;
}
