using System;
public class Kamus
{
private Dictionary< string, HashSet< string>> a = new Dictionary< string, HashSet< string>> ( ) ;
public void tambah( string kata, string[ ] sinonim)
{
if ( ! a.ContainsKey ( kata) )
{
a[ kata] = new HashSet< string> ( ) ;
}
foreach ( var item in sinonim)
{
if ( ! a.ContainsKey ( item) )
{
a[ item] = new HashSet< string> ( ) ;
}
a[ kata] .Add ( item) ;
a[ item] .Add ( kata) ;
}
}
public string[ ] ambilSinonim( string kata)
{
if ( ! a.ContainsKey ( kata) )
{
return null ;
}
return a[ kata] .Where ( w => w != kata) .ToArray ( ) ;
}
}
public class Test
{
public static void Main( )
{
Kamus kamus = new Kamus( ) ;
kamus.tambah ( "big" , new string[ ] { "large" , "great" } ) ;
kamus.tambah ( "big" , new string[ ] { "huge" , "fat" } ) ;
kamus.tambah ( "huge" , new string[ ] { "enormous" , "gigantic" } ) ;
void showResult( string kata)
{
var sinonim = kamus.ambilSinonim ( kata) ;
Console.WriteLine ( $"Sinonim '{kata}': {(sinonim == null ? " null " : string.Join(" , ", sinonim))}" ) ;
}
showResult( "big" ) ;
showResult( "huge" ) ;
showResult( "gigantic" ) ;
showResult( "colossal" ) ;
}
}
dXNpbmcgU3lzdGVtOwogCnB1YmxpYyBjbGFzcyBLYW11cwp7CiAgICBwcml2YXRlIERpY3Rpb25hcnk8c3RyaW5nLCBIYXNoU2V0PHN0cmluZz4+IGEgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIEhhc2hTZXQ8c3RyaW5nPj4oKTsKIAogICAgcHVibGljIHZvaWQgdGFtYmFoKHN0cmluZyBrYXRhLCBzdHJpbmdbXSBzaW5vbmltKQogICAgewogICAgICAgIGlmICghYS5Db250YWluc0tleShrYXRhKSkKICAgICAgICB7CiAgICAgICAgICAgIGFba2F0YV0gPSBuZXcgSGFzaFNldDxzdHJpbmc+KCk7CiAgICAgICAgfQogCiAgICAgICAgZm9yZWFjaCAodmFyIGl0ZW0gaW4gc2lub25pbSkKICAgICAgICB7CiAgICAgICAgICAgIGlmICghYS5Db250YWluc0tleShpdGVtKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYVtpdGVtXSA9IG5ldyBIYXNoU2V0PHN0cmluZz4oKTsKICAgICAgICAgICAgfQogCiAgICAgICAgICAgIGFba2F0YV0uQWRkKGl0ZW0pOwogICAgICAgICAgICBhW2l0ZW1dLkFkZChrYXRhKTsKICAgICAgICB9CiAgICB9CiAKICAgIHB1YmxpYyBzdHJpbmdbXSBhbWJpbFNpbm9uaW0oc3RyaW5nIGthdGEpCiAgICB7CiAgICAgICAgaWYgKCFhLkNvbnRhaW5zS2V5KGthdGEpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogCiAgICAgICAgcmV0dXJuIGFba2F0YV0uV2hlcmUodyA9PiB3ICE9IGthdGEpLlRvQXJyYXkoKTsKICAgIH0KfQogCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQlLYW11cyBrYW11cyA9IG5ldyBLYW11cygpOwoJCWthbXVzLnRhbWJhaCgiYmlnIiwgbmV3IHN0cmluZ1tdIHsgImxhcmdlIiwgImdyZWF0IiB9KTsKCQlrYW11cy50YW1iYWgoImJpZyIsIG5ldyBzdHJpbmdbXSB7ICJodWdlIiwgImZhdCIgfSk7CgkJa2FtdXMudGFtYmFoKCJodWdlIiwgbmV3IHN0cmluZ1tdIHsgImVub3Jtb3VzIiwgImdpZ2FudGljIiB9KTsKIAoJCXZvaWQgc2hvd1Jlc3VsdChzdHJpbmcga2F0YSkKCQl7CgkJCXZhciBzaW5vbmltID0ga2FtdXMuYW1iaWxTaW5vbmltKGthdGEpOwoJCQlDb25zb2xlLldyaXRlTGluZSgkIlNpbm9uaW0gJ3trYXRhfSc6IHsoc2lub25pbSA9PSBudWxsID8gIm51bGwiIDogc3RyaW5nLkpvaW4oIiwgIiwgc2lub25pbSkpfSIpOwoJCX0KIAoJCXNob3dSZXN1bHQoImJpZyIpOwoJCXNob3dSZXN1bHQoImh1Z2UiKTsKCQlzaG93UmVzdWx0KCJnaWdhbnRpYyIpOwoJCXNob3dSZXN1bHQoImNvbG9zc2FsIik7Cgl9Cn0=