#include #include #include #include #include bool isConcat(std::string &s, int pos, std::vector &v, std::unordered_set st) { if (st.size() == v.size()) return 1; for (int i = 0; i < v.size(); ++i) { bool ok = 1; if (st.find(i) != st.end()) continue; if (v[i].size() > s.size() - pos) continue; for (int j = 0; j < v[i].size(); ++j) { if (s[pos + j] != v[i][j]) { ok = 0; break; } } if (ok) { st.insert(i); if (isConcat(s, pos + v[i].size(), v, st)) return 1; st.erase(i); } } return 0; } int main() { std::ifstream in; std::ofstream out; in.open("input.txt"); out.open("output.txt"); std::string s, temp; in >> s; std::vector v; while (in >> temp) { v.push_back(temp); } for (int i = 0; i < s.size(); ++i) { std::unordered_set st; if (isConcat(s, i, v, st)) out << i << ' '; } }