时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述 

给你两个长度相同的字符串a,b,现在已知b是a编码之后的结果
比如a = "CAT", b = "DOG", 那么D其实是C,O其实是A,G其实是T

现在给你一个字符串c,如果c能够被解码出来,输出c解码后的字符串,如果不能输出@

输入描述:

输入三行,每行一个字符串,长度在50以内

输出描述:

输出一个字符串
示例1

输入

复制
CAT
DOG
GOD

输出

复制
TAC
示例2

输入

复制
BANANA
METETE
TEMP

输出

复制
@
示例3

输入

复制
THEQUICKBROWNFOXJUMPSOVERTHELAZYHOG
UIFRVJDLCSPXOGPYKVNQTPWFSUIFMBAZIPH
DIDYOUNOTICESKIPPEDLETTER

输出

复制
CHCXNTMNSHBDRJHOODCKDSSDQ

说明

E之外的其他字母一一对应之后,E只能对应D 

备注:

子任务1:|a| <= 10
子任务2:|a| <= 40
		
子任务3:无限制
c++代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
typedef long long ll;
string a, b, c;
map<char, char> jiema;
vector<bool> visited1;
int count1 = 0;
int index1 = -1;
vector<bool> visited2;
int count2 = 0;
int index2 = -1;
string ret;

void init() {
	visited1.assign(26, false);
	visited2.assign(26, false);
	for (int i = 0; i < a.size(); i++) {
		jiema[b[i]] = a[i];
		visited1[b[i] - 'A'] = true;
		visited2[a[i] - 'A'] = true;
	}

	for (int i = 0; i < 26; i++) {
		if (visited1[i] == true) {
			count1++;
		} else {
			index1 = i;
		}
		if (visited2[i] == true) {
			count2++;
		} else {
			index2 = i;
		}
	}
	if (count1 == 25 && count1 == count2) {
		jiema[index1 + 'A'] = index2 + 'A';
	}
}

void solve() {
	for (int i = 0; i < c.size(); i++) {
		if (jiema.count(c[i])) {
			ret.push_back(jiema[c[i]]);
		} else {
			cout << "@" << endl;
			return;
		}
	}
	cout << ret << endl;
}

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> a >> b >> c;
	init();
	solve();
	return 0;
}