#include <iostream>
#include <vector>
#include <string>
#include <unordered_set>
using namespace std;
void generateCombinations(vector<string>& inputStrings, string& currentString, int index, unordered_set<string>& uniqueCombinations) {
if (index == currentString.length()) {
uniqueCombinations.insert(currentString);
return;
}
for (int i = 0; i < inputStrings.size(); ++i) {
currentString[index] = inputStrings[i][index];
generateCombinations(inputStrings, currentString, index + 1, uniqueCombinations);
}
}
vector<string> generateUniqueCombinations(vector<string>& inputStrings) {
unordered_set<string> uniqueCombinations;
int length = inputStrings[0].length();
string currentString(length, ' ');
generateCombinations(inputStrings, currentString, 0, uniqueCombinations);
return vector<string>(uniqueCombinations.begin(), uniqueCombinations.end());
}
int main() {
int N, M;
cin >> N >> M;
vector<string> inputStrings(N);
for (int i = 0; i < N; ++i) {
cin >> inputStrings[i];
}
vector<string> uniqueCombinations = generateUniqueCombinations(inputStrings);
for (const string& combination : uniqueCombinations) {
cout << combination << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIGdlbmVyYXRlQ29tYmluYXRpb25zKHZlY3RvcjxzdHJpbmc+JiBpbnB1dFN0cmluZ3MsIHN0cmluZyYgY3VycmVudFN0cmluZywgaW50IGluZGV4LCB1bm9yZGVyZWRfc2V0PHN0cmluZz4mIHVuaXF1ZUNvbWJpbmF0aW9ucykgewogICAgaWYgKGluZGV4ID09IGN1cnJlbnRTdHJpbmcubGVuZ3RoKCkpIHsKICAgICAgICB1bmlxdWVDb21iaW5hdGlvbnMuaW5zZXJ0KGN1cnJlbnRTdHJpbmcpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0U3RyaW5ncy5zaXplKCk7ICsraSkgewogICAgICAgIGN1cnJlbnRTdHJpbmdbaW5kZXhdID0gaW5wdXRTdHJpbmdzW2ldW2luZGV4XTsKICAgICAgICBnZW5lcmF0ZUNvbWJpbmF0aW9ucyhpbnB1dFN0cmluZ3MsIGN1cnJlbnRTdHJpbmcsIGluZGV4ICsgMSwgdW5pcXVlQ29tYmluYXRpb25zKTsKICAgIH0KfQoKdmVjdG9yPHN0cmluZz4gZ2VuZXJhdGVVbmlxdWVDb21iaW5hdGlvbnModmVjdG9yPHN0cmluZz4mIGlucHV0U3RyaW5ncykgewogICAgdW5vcmRlcmVkX3NldDxzdHJpbmc+IHVuaXF1ZUNvbWJpbmF0aW9uczsKICAgIGludCBsZW5ndGggPSBpbnB1dFN0cmluZ3NbMF0ubGVuZ3RoKCk7CiAgICBzdHJpbmcgY3VycmVudFN0cmluZyhsZW5ndGgsICcgJyk7CgogICAgZ2VuZXJhdGVDb21iaW5hdGlvbnMoaW5wdXRTdHJpbmdzLCBjdXJyZW50U3RyaW5nLCAwLCB1bmlxdWVDb21iaW5hdGlvbnMpOwoKICAgIHJldHVybiB2ZWN0b3I8c3RyaW5nPih1bmlxdWVDb21iaW5hdGlvbnMuYmVnaW4oKSwgdW5pcXVlQ29tYmluYXRpb25zLmVuZCgpKTsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgTiwgTTsKICAgIGNpbiA+PiBOID4+IE07CgogICAgdmVjdG9yPHN0cmluZz4gaW5wdXRTdHJpbmdzKE4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyArK2kpIHsKICAgICAgICBjaW4gPj4gaW5wdXRTdHJpbmdzW2ldOwogICAgfQoKICAgIHZlY3RvcjxzdHJpbmc+IHVuaXF1ZUNvbWJpbmF0aW9ucyA9IGdlbmVyYXRlVW5pcXVlQ29tYmluYXRpb25zKGlucHV0U3RyaW5ncyk7CgogICAgZm9yIChjb25zdCBzdHJpbmcmIGNvbWJpbmF0aW9uIDogdW5pcXVlQ29tYmluYXRpb25zKSB7CiAgICAgICAgY291dCA8PCBjb21iaW5hdGlvbiA8PCBlbmRsOwogICAgfQoKICAgIHJldHVybiAwOwp9