#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return a == 0 ? b : gcd(b % a, a); }
long long pow(long long a, long long b, long long M) {
  long long t = 1;
  for (a %= M; b; b >>= 1) {
    if (b & 1) t = t * a % M;
    a = a * a % M;
  }
  return t;
}
const int N = 1e6 + 5;
char a[N], b[N];
long long c[26], d[26], t, p, e[26];
int check(long long x) {
  long long m = 0;
  for (int i = 0; i <= int(25); i++)
    if (d[i]) {
      if (c[i] / d[i] >= x) continue;
      m += d[i] * x - c[i];
    }
  return m <= t;
}
int main() {
  scanf("%s%s", a + 1, b + 1);
  int n = strlen(a + 1), m = strlen(b + 1);
  for (int i = 1; i <= int(n); i++)
    if (a[i] == '?')
      t++;
    else
      c[a[i] - 'a']++;
  for (int i = 1; i <= int(m); i++) d[b[i] - 'a']++;
  for (long long l = 0, r = N; l <= r;) {
    long long x = (l + r) / 2;
    if (check(x))
      l = x + 1, p = x;
    else
      r = x - 1;
  }
  long long E = 0;
  for (int i = 0; i <= int(25); i++)
    if (d[i]) {
      if (c[i] / d[i] >= p) continue;
      e[i] = d[i] * p - c[i];
      E += d[i] * p - c[i];
    };
  e[25] += t - E;
  int j = 0;
  for (int i = 1; i <= int(n); i++)
    if (a[i] == '?') {
      while (j <= 25 && !e[j]) j++;
      a[i] = j + 'a';
      e[j]--;
    }
  printf("%s", a + 1);
}
