#include <bits/stdc++.h>
using namespace std;
class Kamus {
private:
map<string, vector<string> > data;
void hubungkan(const string& a, const string& b){
vector<string>& daftar = data[a];
if(find(daftar.begin(), daftar.end(), b) == daftar.end()){
daftar.push_back(b);
}
}
public:
void tambah(const string& kata, const vector<string>& sinonim){
data[kata];
for(const string& s : sinonim){
if(s == kata) continue;
hubungkan(kata, s);
hubungkan(s, kata);
}
}
const vector<string>* ambilSinonim(const string& kata) const {
map<string, vector<string> >::const_iterator it = data.find(kata);
if(it == data.end()) return nullptr;
return &(it->second);
}
};
void tc(const vector<string>* hasil){
if(hasil == nullptr){
cout << "null\n";
return;
}
cout << "[";
for(size_t i = 0; i < hasil->size(); i++){
if(i > 0) cout << ", ";
cout << (*hasil)[i];
}
cout << "]\n";
}
int main(){
Kamus kamus;
kamus.tambah("big", {"large", "great"});
kamus.tambah("big", {"huge", "fat"});
kamus.tambah("huge", {"enormous", "gigantic"});
tc(kamus.ambilSinonim("big"));
tc(kamus.ambilSinonim("huge"));
tc(kamus.ambilSinonim("gigantic"));
tc(kamus.ambilSinonim("colossal"));
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBLYW11cyB7CnByaXZhdGU6CgltYXA8c3RyaW5nLCB2ZWN0b3I8c3RyaW5nPiA+IGRhdGE7CgoJdm9pZCBodWJ1bmdrYW4oY29uc3Qgc3RyaW5nJiBhLCBjb25zdCBzdHJpbmcmIGIpewoJCXZlY3RvcjxzdHJpbmc+JiBkYWZ0YXIgPSBkYXRhW2FdOyAgCgkJaWYoZmluZChkYWZ0YXIuYmVnaW4oKSwgZGFmdGFyLmVuZCgpLCBiKSA9PSBkYWZ0YXIuZW5kKCkpewoJCQlkYWZ0YXIucHVzaF9iYWNrKGIpOwoJCX0KCX0KCnB1YmxpYzoKCXZvaWQgdGFtYmFoKGNvbnN0IHN0cmluZyYga2F0YSwgY29uc3QgdmVjdG9yPHN0cmluZz4mIHNpbm9uaW0pewoJCWRhdGFba2F0YV07ICAKCgkJZm9yKGNvbnN0IHN0cmluZyYgcyA6IHNpbm9uaW0pewoJCQlpZihzID09IGthdGEpIGNvbnRpbnVlOyAgICAKCQkJaHVidW5na2FuKGthdGEsIHMpOyAgICAgICAgIAoJCQlodWJ1bmdrYW4ocywga2F0YSk7ICAgICAgICAKCQl9Cgl9IAoKCWNvbnN0IHZlY3RvcjxzdHJpbmc+KiBhbWJpbFNpbm9uaW0oY29uc3Qgc3RyaW5nJiBrYXRhKSBjb25zdCB7CgkJbWFwPHN0cmluZywgdmVjdG9yPHN0cmluZz4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhLmZpbmQoa2F0YSk7CgkJaWYoaXQgPT0gZGF0YS5lbmQoKSkgcmV0dXJuIG51bGxwdHI7CgkJcmV0dXJuICYoaXQtPnNlY29uZCk7Cgl9Cn07Cgp2b2lkIHRjKGNvbnN0IHZlY3RvcjxzdHJpbmc+KiBoYXNpbCl7CglpZihoYXNpbCA9PSBudWxscHRyKXsKCQljb3V0IDw8ICJudWxsXG4iOwoJCXJldHVybjsKCX0KCWNvdXQgPDwgIlsiOwoJZm9yKHNpemVfdCBpID0gMDsgaSA8IGhhc2lsLT5zaXplKCk7IGkrKyl7CgkJaWYoaSA+IDApIGNvdXQgPDwgIiwgIjsKCQljb3V0IDw8ICgqaGFzaWwpW2ldOwoJfQoJY291dCA8PCAiXVxuIjsKfQoKaW50IG1haW4oKXsKCUthbXVzIGthbXVzOwoJa2FtdXMudGFtYmFoKCJiaWciLCB7ImxhcmdlIiwgImdyZWF0In0pOwoJa2FtdXMudGFtYmFoKCJiaWciLCB7Imh1Z2UiLCAiZmF0In0pOwoJa2FtdXMudGFtYmFoKCJodWdlIiwgeyJlbm9ybW91cyIsICJnaWdhbnRpYyJ9KTsKCgl0YyhrYW11cy5hbWJpbFNpbm9uaW0oImJpZyIpKTsgICAgICAKCXRjKGthbXVzLmFtYmlsU2lub25pbSgiaHVnZSIpKTsgICAgIAoJdGMoa2FtdXMuYW1iaWxTaW5vbmltKCJnaWdhbnRpYyIpKTsgIAoJdGMoa2FtdXMuYW1iaWxTaW5vbmltKCJjb2xvc3NhbCIpKTsgCglyZXR1cm4gMDsKfQ==