#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <sstream>

using namespace std;

struct buf {
	static const int size = 128;
	buf() { memset(bytes, 0, size);	}

	bool valid_offset(int o) { return (0 <= o && o < size); }

	void set_c(char c, int offset) {
		if (valid_offset(offset)) bytes[offset] = c;
	}

	void set_s(const char *s, int offset) {
		for (int i = 0; i < strlen(s)+1; i++){
			set_c(s[i], offset+i);
		} 
	}

	void set_i(int i, int offset) {
		union {int x; char s[5] = {0};};
		x = i;
		set_s(s, offset);
	}

	void print() {
		for(auto b : bytes) {
			cout << setw(2) << setfill('0') << hex << uppercase
				<< ((unsigned int)b & 0xff);
		}
		cout << endl;
	}
	
	char bytes[size];
};

struct arg {
	enum type_t{ a_u,a_s,a_x,a_c } _type;
	int offset;
	union { int i;char*s;char c; } data;

	static type_t cast_type(char c) {
		if (c == 'u') return a_u;
		if (c == 'x') return a_x;
		if (c == 's') return a_s;
		if (c == 'c') return a_c;
	}

	void type(type_t t) {
		_type = t;
		if (t == a_s) {
			data.s = new char[512];
		}
	}	

	void type(char c) {
		type(cast_type(c));
	}
	
	type_t type() {return _type;}
	
	void* get() {
		if (type() == a_s)
			return data.s;
		else 
			return &data.i;
	}
};

void read_args(string str, string fmt, vector<arg> &varg) {
	void *args[100] = {0};
	int i = 0;
	for (arg &a :varg) {
		args[i++] = a.get();
	}
	//TODO: template this or fake va_list
	int argc = 99;
	sscanf(str.c_str(), fmt.c_str()
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	,args[argc--],args[argc--],args[argc--],args[argc--],args[argc--] 
	);
}

vector<arg> extract_args(string str) {
	vector<arg> varg;
	istringstream istr;
	istr.str(str);
	int idx = 0;
	while (!istr.eof()) {
		char c;
		istr >> c;
		if (c == '%') {
			arg a;
			istr >> c;
			a.type(c);
			varg.push_back(a);
		} else if (c == ',') {
			int n;
			istr >> n;
			varg[idx++].offset = n;
		}
	}
	return varg;
}

string extract_fmt(string &str) {
	return str.substr(0, str.find(','));
}

string stdin_readline() {
	char a[512];
	cin.getline(a, 512);
	return string(a);
}

int main()
{
	string desc, str;
	desc = stdin_readline();
	str = stdin_readline();
	auto varg = extract_args(desc);
	string fmt = extract_fmt(desc);
	read_args(str, fmt, varg);
	buf buffer;
	for (arg &a : varg) {
		if (a.type() == arg::a_c)
			buffer.set_c(a.data.c, a.offset);
		else if (a.type() == arg::a_s)
			buffer.set_s(a.data.s, a.offset);
		else if (a.type() == arg::a_u || a.type() == arg::a_x)
			buffer.set_i(a.data.i, a.offset);
	}
	buffer.print();
		
	return 0;
}