#include <bits/stdc++.h>
using namespace std;
const double PI = 3.141592653589793238;
long long powmod(long long a, long long b) {
  long long res = 1;
  a %= 1000000007;
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % 1000000007;
    a = a * a % 1000000007;
  }
  return res;
}
int check[30], cnt, ind;
vector<int> vec;
vector<int>::iterator it;
void clear(int amt) {
  for (int i = 0; i < 27; i++) {
    if (check[i] && check[i] <= amt) {
      check[i] = 0;
    }
  }
  int del = 0;
  for (it = vec.begin(); it != vec.end(); it++) {
    cnt--;
    del++;
    if (*it == amt) break;
  }
  vec.erase(vec.begin(), vec.begin() + del);
}
int main() {
  char str[500005];
  int len = 0;
  bool flag;
  scanf("%s", str + 1);
  for (int i = 1; str[i] != '\0'; i++) len++;
  if (len < 26) {
    printf("-1\n");
    return 0;
  }
  flag = false;
  for (int i = 1; i <= len; i++) {
    if (isalpha(str[i])) {
      if (check[str[i] - 64]) {
        clear(check[str[i] - 64]);
      }
      check[str[i] - 64] = i;
    }
    cnt++;
    vec.push_back(i);
    if (cnt == 26) {
      flag = true;
      break;
    }
  }
  if (!flag) {
    printf("-1\n");
  } else {
    int j = 1;
    for (it = vec.begin(); it != vec.end(); it++) {
      if (str[*it] == '?') {
        if (j <= 26) {
          while (j <= 26) {
            if (!check[j]) {
              str[*it] = j + 64;
              check[j] = true;
              break;
            }
            j++;
          }
        }
      }
    }
    for (int i = 1; str[i] != '\0'; i++) {
      if (str[i] == '?') {
        printf("A");
      } else {
        printf("%c", str[i]);
      }
    }
  }
  return !printf("\n");
  ;
}
