#include<iostream>
#include <algorithm>
#include<string>
#include <bitset>
#include <vector>
#include <functional>
#include <climits>
#include <iomanip>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <numeric>
using namespace std;
using ll = long long;
int main()
{
	long double a, b = 0, c = 0, d = 0;

	//ll a, b = 0, c = 0, d = 0;
	ll l;
	char C[1000][1000] = {};
	long double x[1001] = {}, y[1001] = {}, xhensa[1001] = {}, yhensa[1001] = {}, xave, yave, xkyobun[1001] = {}, ykyobun[1001] = {}, xykyobun[1001] = {}, xkyo = 0, ykyo = 0, xykyo = 0;
	string s, t;
	ll n, h[100001], w[100001];
	cin >> s;
	cin >> t;
	if ((int)s.length() - (int)t.length()<0) {
		cout << "UNRESTORABLE" << endl;
		return 0;
	}
	b = -1;
	for (int i = 0; i <= s.length() - t.length(); i++)
	{
		a = 0;
		for (int j = 0; j < t.length(); j++)
		{

			if (!(s[i + j] == t[j] || s[i + j] == '?') && i + j<s.length() && j<t.length())
			{
				a = 1;
				break;
			}
		}

		if (a == 0)
		{
			b = i;
		}
	}
	if (b == -1)
	{
		cout << "UNRESTORABLE" << endl;
		return 0;
	}
	for (int i = 0; i < s.length(); i++)
	{
		if (i == b)
		{
			cout << t;
			i += t.length() - 1;
		}
		else
		{
			if (s[i] == '?')
			{
				cout << 'a';
			}
			else
			{
				cout << s[i];
			}
		}
	}


	//cout << sum << endl;
	//cout <<  endl;
	cout << endl;

	return 0;
}

//#include<iostream>
//#include <algorithm>
//#include<string>
//#include <bitset>
//#include <vector>
//#include <functional>
//#include <climits>
//#include <iomanip>
//#include <utility>
//#include <stack>
//#include <queue>
//#include <math.h>
//#include <iomanip>
//#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
//#include <numeric>
//using namespace std;
//using ll = long long;
//int main()
//{
//	//long double a, b = 0, c = 0, d = 0;
//
//	ll a, b = 0, c = 0, d = 0;
//	ll l;
//	char C[1000][1000] = {};
//	long double x[1001] = {}, y[1001] = {}, xhensa[1001] = {}, yhensa[1001] = {}, xave, yave, xkyobun[1001] = {}, ykyobun[1001] = {}, xykyobun[1001] = {}, xkyo = 0, ykyo = 0, xykyo = 0;
//	string s, t;
//	ll n, h[100001], w[100001];
//	cin >> s;
//	cin >> t;
//	b = -1;
//	for (int i = 0; i <= s.length() - t.length(); i++)
//	{
//		a = 0;
//		for (int j = 0; j < t.length(); j++)
//		{
//			
//			if (!(s[i + j] == t[j] || s[i + j] == '?')&&i+j<s.length()&&j<t.length())
//			{
//				a = 1;
//				//break;
//			}
//		}
//
//		if (a == 0)
//		{
//			b = i;
//		}
//	}
//	if (b == -1)
//	{
//		cout << "UNRESTORABLE" << endl;
//		return 0;
//	}
//	for (int i = 0; i < s.length(); i++)
//	{
//		if (i == b)
//		{
//			for (int j = 0; j < t.length(); j++)
//			{
//				cout << t[j];
//			}
//			i += t.length()-1;
//			if (i==s.length()-1)
//			{
//				cout << endl;
//
//				return 0;
//			}
//		}
//		else if(i < s.length())
//		{
//			if (s[i] == '?')
//			{
//				cout << 'a';
//			}
//			else
//			{
//				cout << s[i];
//			}
//		}
//	}
//
//
//	//cout << sum << endl;
//	//cout <<  endl;
//	cout <<  endl;
//
//	return 0;
//}
//memcpy(x, visited, sizeof(ll)*n);
//void kansuu(ll num, ll visited[10]) {}
//kansuu(1, zz);
//cout << setprecision(15) << v << endl;

//int temp;
//for (int i = 0; i < n - 1; i++) {
//	for (int j = n - 1; j > i; j--) {
//		if (w[j - 1] < w[j]) {  /* 前の要素の方が大きかったら */
//			temp = w[j];        /* 交換する */
//			w[j] = w[j - 1];
//			w[j - 1] = temp;
//		}
//	}
//}



Measured memory_bytes: 256