#include #include #include #include #include using namespace std; int N, nr; string s[16]; vector v[16]; vector sol; int numar[16]; int start[16]; void addDigit(int idx, string s){ int oldIdx = idx; idx = numar[idx]; s = s + v[idx][start[idx]]; if(oldIdx == nr){ vector ::iterator it = find(sol.begin(), sol.end(), s); if(it == sol.end()){ sol.push_back(s); } } else { addDigit(oldIdx+1, s); } start[idx]++; if(start[idx] < v[idx].size()) addDigit(oldIdx, s.substr(0, s.size()-1)); start[idx] = 0; } int main(){ //freopen("fis.in", "r", stdin); N = 10; for(int i =1 ; i <= N; ++i){ cin >> s[i]; for(int j = 0; j < s[i].length(); ++j){ v[i-1].push_back(s[i][j]); } } char c; scanf("\n"); for(int i =1 ; i <= nr; ++i){ sort(v[i].begin(), v[i].end()); } while(scanf("%c", &c) != EOF){ int p = c - '0'; numar[++nr] = p; } addDigit(1, ""); sort(sol.begin(), sol.end()); for(vector::iterator it = sol.begin(); it != sol.end(); ++it) cout << *it << '\n'; return 0; }