#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <algorithm>

// Liste der bekannten Substrings
const std::map<int, std::vector<std::string>> mTeilstrings = {
    {1, {"[8A]", "[UKE]"}},
    {2, {"[Dings da]", "[DingsBums]"}},
    {3, {"[GF]", "[MOD]", "[MOD3]", "[MOD6]"}},
    {4, {"[Weiss]", "[Rot]", "[Orange-Blau]"}}
};


auto parse_line(std::string line, 
	   		   const std::map<int, std::vector<std::string>> &substring_groups)
{
	std::vector<std::pair<std::string, int>> result;
	for (auto const& kv : substring_groups)
	{
		for (auto const &substring:  kv.second)
		{
			std::string::size_type pos = 0;
			while ((pos = line.find(substring, pos)) != std::string::npos) 
			{
				result.push_back(std::make_pair(substring, kv.first));
				pos += substring.length();
			}
		}
	}
	return result;
}

std::string reconstitute_line(std::vector<std::pair<std::string, int>> const& substring_pairs)
{
	std::string result;
	int last_group;
	if (not substring_pairs.empty())
	{
		last_group = substring_pairs[0].second;
		result = substring_pairs[0].first;
	}
	for (std::size_t i = 1; i < substring_pairs.size(); ++i)
	{
		int current_group = substring_pairs[i].second;
		if (current_group == last_group)
			return "Zeile enthält illegale Doppelungen";
		result += substring_pairs[i].first;
	}
	return result;
}

int main()
{
	for(std::string line; std::getline(std::cin, line);)
	{
		auto substring_pairs = parse_line(line, mTeilstrings);
		std::sort(substring_pairs.begin(), substring_pairs.end(), 
		          [](auto left_pair, auto right_pair){return left_pair.second > right_pair.second;});
		std::string sorted_line = reconstitute_line(substring_pairs);
		std::cout << "Zeile \"" << line << "\" wird sortiert zu \"" << sorted_line << "\"\n";
	}
}