#include <bits/stdc++.h>
using namespace std;
vector<bool> visited(100005, false);
vector<long long> adj[100005];
vector<long long> parent(100005, -1);
long long ans1 = 0;
long long expo(long long x, long long n, long long M) {
  if (n == 0)
    return 1;
  else if (n % 2 == 0)
    return (expo((x * x) % M, n / 2, M)) % M;
  else
    return (x * expo((x * x) % M, (n - 1) / 2, M)) % M;
}
bool sortbysec(pair<pair<long long, long long>, long long> p1,
               pair<pair<long long, long long>, long long> p2) {
  if (p1.first.first == p2.first.first)
    return p1.first.second > p2.first.second;
  return p1.first.first < p2.first.first;
}
void dfs(long long v) {
  visited[v] = true;
  ans1++;
  if (adj[v].size() == 0) return;
  for (long long j = 0; j < adj[v].size(); j++) {
    if (!visited[adj[v][j]]) dfs(adj[v][j]);
  }
}
long long find(vector<long long> &parent, long long i) {
  while (parent[i] != i) {
    parent[i] = parent[parent[i]];
    i = parent[i];
  }
  return parent[i];
}
void Union(vector<long long> &parent, long long i, long long j) {
  long long x = find(parent, i);
  long long y = find(parent, j);
  parent[x] = y;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long i, j, k, a, b, c, t, x, y, n, m, z, flag = 0, ans = 0, sum = 0;
  t = 1;
  while (t--) {
    string st, s, t;
    cin >> s >> t;
    map<char, long long> mp;
    vector<char> ans;
    for (i = 0; i < s.size(); i++) {
      mp[s[i]]++;
    }
    while (1) {
      for (i = 0; i < t.size(); i++) {
        if (mp[t[i]] > 0) {
          mp[t[i]]--;
        } else if (mp['?'] > 0) {
          ans.push_back(t[i]);
          mp['?']--;
        } else {
          flag = 1;
          break;
        }
      }
      if (flag == 1) break;
    }
    j = 0;
    for (i = 0; i < s.size(); i++) {
      if (s[i] == '?') {
        s[i] = ans[j];
        j++;
      }
    }
    cout << s;
  }
  return 0;
}
