fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <unordered_set>
  5.  
  6. using namespace std;
  7.  
  8. void generateCombinations(vector<string>& inputStrings, string& currentString, int index, unordered_set<string>& uniqueCombinations) {
  9. if (index == currentString.length()) {
  10. uniqueCombinations.insert(currentString);
  11. return;
  12. }
  13.  
  14. for (int i = 0; i < inputStrings.size(); ++i) {
  15. currentString[index] = inputStrings[i][index];
  16. generateCombinations(inputStrings, currentString, index + 1, uniqueCombinations);
  17. }
  18. }
  19.  
  20. vector<string> generateUniqueCombinations(vector<string>& inputStrings) {
  21. unordered_set<string> uniqueCombinations;
  22. int length = inputStrings[0].length();
  23. string currentString(length, ' ');
  24.  
  25. generateCombinations(inputStrings, currentString, 0, uniqueCombinations);
  26.  
  27. return vector<string>(uniqueCombinations.begin(), uniqueCombinations.end());
  28. }
  29.  
  30. int main() {
  31. int N, M;
  32. cin >> N >> M;
  33.  
  34. vector<string> inputStrings(N);
  35. for (int i = 0; i < N; ++i) {
  36. cin >> inputStrings[i];
  37. }
  38.  
  39. vector<string> uniqueCombinations = generateUniqueCombinations(inputStrings);
  40.  
  41. for (const string& combination : uniqueCombinations) {
  42. cout << combination << endl;
  43. }
  44.  
  45. return 0;
  46. }
Success #stdin #stdout 0.01s 5280KB
stdin
3 2
abc
def
stdout

c
e
dbf
ae
dbc
aec
af
ab
abf
abc
aef
db
bf
de
d
def
dc
ac
b
ef
df
dec
bc
f
a
ec