#include <vector>
#include <string>
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <set>
#include <iterator>
#include <cstring>
using namespace std;
int main()
{
set<string> a{"aaa","bbb","ccc","ddd","eee","fff"};
set<string> b{"ddd","eee","fff","ggg","hhh","iii"};
set<string> res;
set_intersection(a.begin(),a.end(),b.begin(),b.end(),
inserter(res,res.begin()));
for(auto s: res) cout << s << endl;
cout << "----------\n";
set<const char*> c{"aaa","bbb","ccc","ddd","eee","fff"};
set<const char*> d{"ddd","eee","fff","ggg","hhh","iii"};
set<const char*> r;
set_intersection(c.begin(),c.end(),d.begin(),d.end(),
inserter(r,r.begin()),[](const char*x,const char*y){ return strcmp(x,y) < 0; });
for(auto s: r) cout << s << endl;
cout << "----------\n";
vector<const char*> e{"aaa","bbb","ccc","ddd","eee","fff"};
vector<const char*> f{"ddd","eee","fff","ggg","hhh","iii"};
sort(e.begin(),e.end(),[](const char*x,const char*y){ return strcmp(x,y) < 0; });
sort(f.begin(),f.end(),[](const char*x,const char*y){ return strcmp(x,y) < 0; });
vector<const char*> g;
set_intersection(e.begin(),e.end(),f.begin(),f.end(),
back_inserter(g),[](const char*x,const char*y){ return strcmp(x,y) < 0; });
for(auto s: g) cout << s << endl;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8Y3N0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKaW50IG1haW4oKQp7CiAgICBzZXQ8c3RyaW5nPiBheyJhYWEiLCJiYmIiLCJjY2MiLCJkZGQiLCJlZWUiLCJmZmYifTsKICAgIHNldDxzdHJpbmc+IGJ7ImRkZCIsImVlZSIsImZmZiIsImdnZyIsImhoaCIsImlpaSJ9OwoKICAgIHNldDxzdHJpbmc+IHJlczsKICAgIHNldF9pbnRlcnNlY3Rpb24oYS5iZWdpbigpLGEuZW5kKCksYi5iZWdpbigpLGIuZW5kKCksCiAgICAgICAgICAgICAgICAgICAgIGluc2VydGVyKHJlcyxyZXMuYmVnaW4oKSkpOwogICAgZm9yKGF1dG8gczogcmVzKSBjb3V0IDw8IHMgPDwgZW5kbDsKCiAgICBjb3V0IDw8ICItLS0tLS0tLS0tXG4iOwoKICAgIHNldDxjb25zdCBjaGFyKj4gY3siYWFhIiwiYmJiIiwiY2NjIiwiZGRkIiwiZWVlIiwiZmZmIn07CiAgICBzZXQ8Y29uc3QgY2hhcio+IGR7ImRkZCIsImVlZSIsImZmZiIsImdnZyIsImhoaCIsImlpaSJ9OwoKICAgIHNldDxjb25zdCBjaGFyKj4gcjsKICAgIHNldF9pbnRlcnNlY3Rpb24oYy5iZWdpbigpLGMuZW5kKCksZC5iZWdpbigpLGQuZW5kKCksCiAgICAgICAgICAgICAgICAgICAgIGluc2VydGVyKHIsci5iZWdpbigpKSxbXShjb25zdCBjaGFyKngsY29uc3QgY2hhcip5KXsgcmV0dXJuIHN0cmNtcCh4LHkpIDwgMDsgfSk7CiAgICBmb3IoYXV0byBzOiByKSBjb3V0IDw8IHMgPDwgZW5kbDsKCiAgICBjb3V0IDw8ICItLS0tLS0tLS0tXG4iOwoKICAgIHZlY3Rvcjxjb25zdCBjaGFyKj4gZXsiYWFhIiwiYmJiIiwiY2NjIiwiZGRkIiwiZWVlIiwiZmZmIn07CiAgICB2ZWN0b3I8Y29uc3QgY2hhcio+IGZ7ImRkZCIsImVlZSIsImZmZiIsImdnZyIsImhoaCIsImlpaSJ9OwoKICAgIHNvcnQoZS5iZWdpbigpLGUuZW5kKCksW10oY29uc3QgY2hhcip4LGNvbnN0IGNoYXIqeSl7IHJldHVybiBzdHJjbXAoeCx5KSA8IDA7IH0pOwogICAgc29ydChmLmJlZ2luKCksZi5lbmQoKSxbXShjb25zdCBjaGFyKngsY29uc3QgY2hhcip5KXsgcmV0dXJuIHN0cmNtcCh4LHkpIDwgMDsgfSk7CgogICAgdmVjdG9yPGNvbnN0IGNoYXIqPiBnOwogICAgc2V0X2ludGVyc2VjdGlvbihlLmJlZ2luKCksZS5lbmQoKSxmLmJlZ2luKCksZi5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgYmFja19pbnNlcnRlcihnKSxbXShjb25zdCBjaGFyKngsY29uc3QgY2hhcip5KXsgcmV0dXJuIHN0cmNtcCh4LHkpIDwgMDsgfSk7CiAgICBmb3IoYXV0byBzOiBnKSBjb3V0IDw8IHMgPDwgZW5kbDsKCn0K