#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("inline")
#include<bits/stdc++.h>
using namespace std;
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
class Encrypter{
public :
string t[ 26 ] ;
map< string,int > cnt;
Encrypter( vector< char > & keys, vector< string> & values, vector< string> & dic) {
int i;
for ( i= ( 0 ) ; i< ( 26 ) ; i++ ) {
t[ i] = "@" ;
}
for ( i= ( 0 ) ; i< ( keys.size ( ) ) ; i++ ) {
t[ keys[ i] - 'a' ] = values[ i] ;
}
for ( i= ( 0 ) ; i< ( dic.size ( ) ) ; i++ ) {
cnt[ encrypt( dic[ i] ) ] ++ ;
}
}
string encrypt( string s) {
int i;
string res;
for ( i= ( 0 ) ; i< ( s.size ( ) ) ; i++ ) {
res + = t[ s[ i] - 'a' ] ;
}
return res;
}
int decrypt( string s) {
if ( cnt.count ( s) == 0 ) {
return 0 ;
}
return cnt[ s] ;
}
}
;
// cLay version 20220312-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Encrypter {
// public:
// string t[26];
// map<string,int> cnt;
// Encrypter(vector<char>& keys, VS& values, VS& dic) {
// rep(i,26) t[i] = "@";
// rep(i,keys.size()) t[keys[i]-'a'] = values[i];
// rep(i,dic.size()) cnt[encrypt(dic[i])]++;
// }
//
// string encrypt(string s) {
// string res;
// rep(i,s.size()) res += t[s[i]-'a'];
// return res;
// }
//
// int decrypt(string s) {
// if(cnt.count(s)==0) return 0;
// return cnt[s];
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0IikKI3ByYWdtYSBHQ0Mgb3B0aW1pemUoInVucm9sbC1sb29wcyIpCiNwcmFnbWEgR0NDIG9wdGltaXplKCJpbmxpbmUiKQojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIG1haW4gZHVtbXlfbWFpbgppbnQgbWFpbigpewogIHJldHVybiAwOwp9CiN1bmRlZiBtYWluCmNsYXNzIEVuY3J5cHRlcnsKICBwdWJsaWM6CiAgc3RyaW5nIHRbMjZdOwogIG1hcDxzdHJpbmcsaW50PiBjbnQ7CiAgRW5jcnlwdGVyKHZlY3RvcjxjaGFyPiYga2V5cywgdmVjdG9yPHN0cmluZz4mIHZhbHVlcywgdmVjdG9yPHN0cmluZz4mIGRpYyl7CiAgICBpbnQgaTsKICAgIGZvcihpPSgwKTtpPCgyNik7aSsrKXsKICAgICAgdFtpXSA9ICJAIjsKICAgIH0KICAgIGZvcihpPSgwKTtpPChrZXlzLnNpemUoKSk7aSsrKXsKICAgICAgdFtrZXlzW2ldLSdhJ10gPSB2YWx1ZXNbaV07CiAgICB9CiAgICBmb3IoaT0oMCk7aTwoZGljLnNpemUoKSk7aSsrKXsKICAgICAgY250W2VuY3J5cHQoZGljW2ldKV0rKzsKICAgIH0KICB9CiAgc3RyaW5nIGVuY3J5cHQoc3RyaW5nIHMpewogICAgaW50IGk7CiAgICBzdHJpbmcgcmVzOwogICAgZm9yKGk9KDApO2k8KHMuc2l6ZSgpKTtpKyspewogICAgICByZXMgKz0gdFtzW2ldLSdhJ107CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KICBpbnQgZGVjcnlwdChzdHJpbmcgcyl7CiAgICBpZihjbnQuY291bnQocyk9PTApewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBjbnRbc107CiAgfQp9CjsKLy8gY0xheSB2ZXJzaW9uIDIwMjIwMzEyLTEKCi8vIC0tLSBvcmlnaW5hbCBjb2RlIC0tLQovLyAjZGVmaW5lIG1haW4gZHVtbXlfbWFpbgovLyB7fQovLyAjdW5kZWYgbWFpbgovLyAKLy8gY2xhc3MgRW5jcnlwdGVyIHsKLy8gcHVibGljOgovLyAgIHN0cmluZyB0WzI2XTsKLy8gICBtYXA8c3RyaW5nLGludD4gY250OwovLyAgIEVuY3J5cHRlcih2ZWN0b3I8Y2hhcj4mIGtleXMsIFZTJiB2YWx1ZXMsIFZTJiBkaWMpIHsKLy8gICAgIHJlcChpLDI2KSB0W2ldID0gIkAiOwovLyAgICAgcmVwKGksa2V5cy5zaXplKCkpIHRba2V5c1tpXS0nYSddID0gdmFsdWVzW2ldOwovLyAgICAgcmVwKGksZGljLnNpemUoKSkgY250W2VuY3J5cHQoZGljW2ldKV0rKzsKLy8gICB9Ci8vICAgCi8vICAgc3RyaW5nIGVuY3J5cHQoc3RyaW5nIHMpIHsKLy8gICAgIHN0cmluZyByZXM7Ci8vICAgICByZXAoaSxzLnNpemUoKSkgcmVzICs9IHRbc1tpXS0nYSddOwovLyAgICAgcmV0dXJuIHJlczsKLy8gICB9Ci8vICAgCi8vICAgaW50IGRlY3J5cHQoc3RyaW5nIHMpIHsKLy8gICAgIGlmKGNudC5jb3VudChzKT09MCkgcmV0dXJuIDA7Ci8vICAgICByZXR1cm4gY250W3NdOwovLyAgIH0KLy8gfTsK