#include <vector>
#include <string>
#include <map>
#include <sstream>
#include <iostream>
using namespace std;
vector<string> ordered_configuration(string configuration) {
// Return value for invalid configurations
vector<string> invalid = {"Invalid configuration"};
// Check if string is empty
if (configuration.empty()) {
return invalid;
}
// Split the configuration string by '|'
vector<string> configs;
stringstream ss(configuration);
string item;
while (getline(ss, item, '|')) {
configs.push_back(item);
}
// Map to store index->configuration pairs
map<int, string> orderMap;
for (const string& config : configs) {
// Each configuration should be 14 characters (0000 + 10 chars)
if (config.length() != 14) {
return invalid;
}
// Extract ordinal index
string indexStr = config.substr(0, 4);
// Check if index is "0000"
if (indexStr == "0000") {
return invalid;
}
// Convert index to integer
int index = stoi(indexStr);
// Check for duplicate indices
if (orderMap.find(index) != orderMap.end()) {
return invalid;
}
// Extract configuration value
string value = config.substr(4);
// Check configuration value length
if (value.length() != 10) {
return invalid;
}
// Store in map
orderMap[index] = value;
}
// Check for sequential indices
for (int i = 1; i <= orderMap.size(); i++) {
if (orderMap.find(i) == orderMap.end()) {
return invalid;
}
}
// Check for unique configurations
vector<string> values;
for (const auto& pair : orderMap) {
values.push_back(pair.second);
}
for (size_t i = 0; i < values.size(); i++) {
for (size_t j = i + 1; j < values.size(); j++) {
if (values[i] == values[j]) {
return invalid;
}
}
}
// Create result vector in correct order
vector<string> result;
for (const auto& pair : orderMap) {
result.push_back(pair.second);
}
return result;
}
int main() {
string input = "0001LAJ5kBX9H8|0003UKURNK403F|0002MO6K1Z9WFA|0004OWRXZFMS2C";
vector<string> result = ordered_configuration(input);
for(size_t i = 0; i < result.size(); i++) {
cout << result[i] ;
cout << endl;
}
return 0;
}