Problem:
Score : 300 points

Problem Statement

E869120 found a chest which is likely to contain treasure.

However, the chest is locked. In order to open it, he needs to enter a string S consisting of lowercase English letters.

He also found a string S', which turns out to be the string S with some of its letters (possibly all or none) replaced with ?.

One more thing he found is a sheet of paper with the following facts written on it:

Condition 1: The string S contains a string T as a contiguous substring.

Condition 2: S is the lexicographically smallest string among the ones that satisfy Condition 1.

Print the string S.

If such a string does not exist, print UNRESTORABLE.

Constraints

1 \leq |S'|, |T| \leq 50

S' consists of lowercase English letters and ?.

T consists of lowercase English letters.

Input

Input is given from Standard Input in the following format:

S
T'

Output

Print the string S.

If such a string does not exist, print UNRESTORABLE instead.

Sample Input 1

?tc????
coder

Sample Output 1

atcoder

There are 26 strings that satisfy Condition 1: atcoder, btcoder, ctcoder,..., ztcoder.
Among them, the lexicographically smallest is atcoder, so we can say S = atcoder.

Sample Input 2

??p??d??
abc

Sample Output 2

UNRESTORABLE

There is no string that satisfies Condition 1, so the string S does not exist.

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<iostream>
#include<string>
int main(void) {
	std::string a ,b;
	std::cin >> a;
	std::cin >> b;
	int q = 0, q_max = 0;
	//std::cout << a.size() << std::endl;
	b.at((int)b.size() - 1 - q);
	int bsize = b.size();
	if(b.size() > 50){ std::cout << "UNRESTORABLE"; system("pause"); return 0; }
	//std::cout <<"bsize = "<< bsize << std::endl;
	int l1;
	for ( l1 = a.size()-1; l1 >= 0; l1--) {
		if (bsize - 1 - q < 0) break;
		if (a.at(l1) == b.at(bsize - 1 - q) || a.at(l1) == '?') { q++; /*std::cout << "into q=" << q << std::endl;*/ }
		else { if (q_max < q) q_max = q; q = 0; }
	}
	//std::cout << "max" << q_max <<"or" << q << std::endl <<"l1 "<< l1;
	if (q_max < b.size() && q < b.size()) { std::cout << "UNRESTORABLE"; system("pause"); return 0; }
	//std::cout << "ikeru"<<std::endl;
	int l3 = 0;
	for (int l2 = 0; l2 < a.size(); l2++) {
		if (l2 >= l1+1&&l3 < b.size()) { std::cout << b.at(l3); l3++; }
		else if (a.at(l2) == '?')
			std::cout << 'a';
		else std::cout << a.at(l2);
	}
	system("pause");
        return 0;
}