#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
const double pi = 4 * atan(1);
const int inf = 1 << 30;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
int nCase = 0;
int dcmp(double x) {
  if (fabs(x) < eps) return 0;
  return x < 0 ? -1 : 1;
}
template <class T>
inline bool read(T &n) {
  T x = 0, tmp = 1;
  char c = getchar();
  while ((c < '0' || c > '9') && c != '-' && c != EOF) c = getchar();
  if (c == EOF) return false;
  if (c == '-') c = getchar(), tmp = -1;
  while (c >= '0' && c <= '9') x *= 10, x += (c - '0'), c = getchar();
  n = x * tmp;
  return true;
}
template <class T>
inline void write(T n) {
  if (n < 0) {
    putchar('-');
    n = -n;
  }
  int len = 0, data[20];
  while (n) {
    data[len++] = n % 10;
    n /= 10;
  }
  if (!len) data[len++] = 0;
  while (len--) putchar(data[len] + 48);
}
long long QMOD(long long x, long long k) {
  long long res = 1LL;
  while (k) {
    if (k & 1) res = res * x % MOD;
    k >>= 1;
    x = x * x % MOD;
  }
  return res;
}
char s[50000 + 10];
int c[26];
int cnt;
int main(int argc, const char *argv[]) {
  scanf("%s", s + 1);
  int len = strlen(s + 1);
  if (len < 26) {
    cout << -1 << endl;
    return 0;
  }
  int kind = 0;
  int p;
  bool flag = false;
  for (int i = 1; i <= len; ++i) {
    if (i > 26) {
      if (s[i - 26] == '?')
        cnt--;
      else {
        c[s[i - 26] - 'A']--;
        if (c[s[i - 26] - 'A'] == 0) kind--;
      }
    }
    if (s[i] == '?')
      cnt++;
    else {
      if (++c[s[i] - 'A'] == 1) kind++;
    }
    if (i >= 26 && kind + cnt == 26) {
      flag = true;
      p = i;
      break;
    }
  }
  if (!flag) {
    cout << -1 << endl;
    return 0;
  }
  for (int i = p, j = 1; j <= 26; ++j, --i) {
    if (s[i] == '?') {
      for (int o = 0; o <= 26; ++o) {
        if (c[o] == 0) {
          s[i] = o + 'A';
          c[o] = 1;
          break;
        }
      }
    }
  }
  for (int i = 1; i <= len; ++i)
    if (s[i] == '?') s[i] = 'A';
  puts(s + 1);
  return 0;
}
