unittest
{
	assert( [ "?tc????", "coder" ].parse.expand.solve == "atcoder" );
	assert( [ "??p??d??", "abc" ].parse.expand.solve == "UNRESTORABLE" );
}



import std.conv;
import std.range;
import std.stdio;
import std.string;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto s = input.front.strip.to!( char[] );
	input.popFront;
	auto t = input.front.strip;
	return tuple( s, t );
}

auto solve( char[] s, string t )
{
	// S内のTにマッチする個所を置換（複数個所マッチする場合を考慮して後ろから検索する）
	auto rc = false;
	auto mc = 0L;
	foreach_reverse( i, c; s )
	{
		if( c == t[ $ - 1 - mc ] || c == '?' ) mc++;
		else                                   mc = 0;
		
		if( mc == t.length )
		{
			s[ i .. i + mc ] = t;
			rc = true;
			break;
		}
	}
	if( !rc ) return "UNRESTORABLE";
	
	// 残りの?を置換
	s = s.replace( "?", "a" );
	
	return s.to!( string );
}
