/* vector< vector > Matrix(10, vector(20, -1)); iterator max_element(range); iterator min_element(range); sort ALLR descending string s istringstream is(s); is >> x; ostringstream os(s); os << x; for (auto x : container) { cout << x << endl; } for_each(v.begin(), v.end(), [&] (int x) { cout << x << endl; } ) */ /* ------------------------------------------------------------------ void dfs(int i) { if (!V[i]) { V[i] = true; for_each(all(W[i]), dfs); } } bool check_graph_connected_dfs() { int start_vertex = 0; V = vi(N, false); dfs(start_vertex); return (find(all(V), 0) == V.end()); } void add(int poz, int val) { for (; poz <= N; poz += zeroes(poz)) { aib[poz] += val; } } long long compute(int poz) { long long sum = 0; for (; poz; poz -= zeroes(poz)) { sum += aib[poz]; } return sum; } */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define ONLINE_JUDGE //=============================================================================================== const double epsilon = 1e-7; #define LL long long #define ULL unsigned long long typedef vector vi; typedef vector vl; typedef vector vvi; typedef vector vvl; typedef vector vd; typedef vector vs; typedef pair ii; typedef pair ll; typedef vector vii; typedef vector vll; #define all(V) V.begin(), V.end() #define allr(V) V.rbegin(), V.rend() #define for_c_it(container, it) for (auto it = container.begin(); it != container.end(); it++) #define present(container, element) (container.find(element) != container.end()) #define sz(a) int((a).size()) #define pb push_back #define zeroes(x) ((x ^ (x - 1)) & x) vector V; vector fr(28, 0); string lett; int N, lg; bool check(string S){ int lg; vector freq(28, 0); lg = S.length(); for (int i = 0; i < lg; ++i) { ++freq[S[i] - 'a']; } for (int i = 0; i < 28; ++i) { if (freq[i] > fr[i]) return false; } return true; } int main() { #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); #endif int nr = 0; string S; cin >> lett; lg = lett.length(); for (int i = 0; i < lg; ++i) { ++fr[lett[i] - 'a']; } cin >> N; for (int i = 0; i < N; ++i) { cin >> S; if (check(S)) { V.push_back(S); } } sort(V.begin(), V.end()); for (int i = 0; i < V.size(); ++i) { cout << V[i] << '\n'; } #ifndef ONLINE_JUDGE while (true); #endif return 0; }