#include <bits/stdc++.h>
using namespace std;
using ll = long long;
template <class T, class U>
using Pa = pair<T, U>;
template <class T>
using vec = vector<T>;
template <class T>
using vvec = vector<vec<T>>;
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  string S, T;
  cin >> S >> T;
  int N = S.size(), M = T.size();
  vec<ll> cntS(26), cntT(26);
  for (int i = 0; i < N; i++)
    if (S[i] != '?') cntS[S[i] - 'a']++;
  for (int i = 0; i < M; i++) cntT[T[i] - 'a']++;
  struct state {
    ll a, b;
    char c;
    bool operator<(const state& R) const {
      if (a != R.a)
        return a > R.a;
      else
        return b > R.b;
    }
  };
  priority_queue<state> Q;
  for (int i = 0; i < 26; i++)
    if (cntT[i]) {
      char c = 'a' + i;
      Q.push((state){cntS[i] / cntT[i], cntS[i] % cntT[i], c});
    }
  for (int i = 0; i < N; i++)
    if (S[i] == '?') {
      auto p = Q.top();
      Q.pop();
      S[i] = p.c;
      p.b++;
      cntS[p.c - 'a']++;
      if (p.b != cntT[p.c - 'a']) {
        Q.push(p);
      } else {
        int c = p.c - 'a';
        Q.push((state){cntS[c] / cntT[c], 0, p.c});
      }
    }
  cout << S << "\n";
}
