#include <iostream>
#include <algorithm>
#include <vector>
 
std::vector<std::string> filtered_files(const std::vector<std::string>& files, const std::vector<std::string>& extensions)
{
    std::vector<std::string> re;
 
    for(const std::string &f : files)
    {
        if (std::find_if(extensions.begin(), extensions.end(),
            [&](const std::string &ex){
                return (f.size() >= ex.size()) && (f.compare(f.size()-ex.size(), ex.size(), ex) == 0);
            }
        ) != extensions.end())
        {
            re.push_back(f);
        }
    }
 
    return re;
}
 
int main()
{
    std::vector<std::string> v{"main.cpp","main.c","main.py"};
    std::vector<std::string> re = filtered_files(v,{".c",".cpp"});
    for(const std::string s  :re) {
        std::cout << s << '\n';
    }
    return 0;
}
 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgoKc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbHRlcmVkX2ZpbGVzKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZmlsZXMsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgZXh0ZW5zaW9ucykKewogICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlOwoKICAgIGZvcihjb25zdCBzdGQ6OnN0cmluZyAmZiA6IGZpbGVzKQogICAgewogICAgICAgIGlmIChzdGQ6OmZpbmRfaWYoZXh0ZW5zaW9ucy5iZWdpbigpLCBleHRlbnNpb25zLmVuZCgpLAogICAgICAgICAgICBbJl0oY29uc3Qgc3RkOjpzdHJpbmcgJmV4KXsKICAgICAgICAgICAgICAgIHJldHVybiAoZi5zaXplKCkgPj0gZXguc2l6ZSgpKSAmJiAoZi5jb21wYXJlKGYuc2l6ZSgpLWV4LnNpemUoKSwgZXguc2l6ZSgpLCBleCkgPT0gMCk7CiAgICAgICAgICAgIH0KICAgICAgICApICE9IGV4dGVuc2lvbnMuZW5kKCkpCiAgICAgICAgewogICAgICAgICAgICByZS5wdXNoX2JhY2soZik7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiByZTsKfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdnsibWFpbi5jcHAiLCJtYWluLmMiLCJtYWluLnB5In07CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmUgPSBmaWx0ZXJlZF9maWxlcyh2LHsiLmMiLCIuY3BwIn0pOwogICAgZm9yKGNvbnN0IHN0ZDo6c3RyaW5nIHMgIDpyZSkgewogICAgICAgIHN0ZDo6Y291dCA8PCBzIDw8ICdcbic7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=