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

int main() {
    std::vector<std::string> Arr = {"1.1", "2.4.5", "1.1.1", "3.4"};
    std::map<std::string, std::string> Tmp;

    std::regex re(R"((.+?)\.\d)");
    std::smatch match;

    for (const auto& i : Arr) {
        Tmp[i] = "*";
        std::string j = i;
        while (std::regex_search(j, match, re)) {
            j = match.str(1);
            Tmp[j] = "*";
        }
    }

    std::vector<std::string> Res;
    for (const auto& pair : Tmp) {
        Res.push_back(pair.first);
    }

    std::sort(Res.begin(), Res.end(), [](const std::string& a, const std::string& b) {
        return (a.length() == b.length()) ? a < b : a.length() > b.length();
    });

    for (const auto& item : Res) {
        std::cout << item << std::endl;
    }

    return 0;
}