#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const char infile[] = "input.in"; const char outfile[] = "output.out"; ifstream fin(infile); ofstream fout(outfile); const int MAXN = 100005; const int oo = 0x3f3f3f3f; typedef vector Graph[MAXN]; typedef vector :: iterator It; const inline int min(const int &a, const int &b) { if( a > b ) return b; return a; } const inline int max(const int &a, const int &b) { if( a < b ) return b; return a; } const inline void Get_min(int &a, const int b) { if( a > b ) a = b; } const inline void Get_max(int &a, const int b) { if( a < b ) a = b; } int N; set Ans; string a[20], x; char st[MAXN]; inline void Back(int K) { if(K == N) { Ans.insert(st); return ; } for(int i = 0 ; i < a[x[K] - '0'].size() ; ++ i) { st[K] = a[x[K] - '0'][i]; Back(K + 1); } } int main() { cin.sync_with_stdio(false); #ifndef ONLINE_JUDGE freopen(infile, "r", stdin); freopen(outfile, "w", stdout); #endif for(int i = 0 ; i < 10 ; ++ i) cin >> a[i]; cin >> x; N = x.size(); Back(0); for(set :: iterator it = Ans.begin(), fin = Ans.end(); it != fin ; ++ it) cout << *it << '\n'; fin.close(); fout.close(); return 0; }