using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _02_ExtractOddOccurrence
{
class oddOccurrence
{
static void Main(string[] args)
{
string inputStr = "C#, SQL, PHP, PHP, SQL, SQL";
char[] separators = new char[] { ',', ' ', '.', '-', '_' };
string[] words = inputStr.Split(separators, StringSplitOptions.RemoveEmptyEntries);
Dictionary<string, int> wordCount = new Dictionary<string, int>();
foreach (string word in words)
{
if (wordCount.ContainsKey(word))
{
wordCount[word]++;
}
else
{
wordCount.Add(word, 1);
}
}
Console.Write("{");
foreach (KeyValuePair<string,int> pair in wordCount)
{
if (pair.Value % 2 != 0)
{
Console.Write("{0},", pair.Key);
}
}
Console.WriteLine("}.");
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UZXh0OwoKbmFtZXNwYWNlIF8wMl9FeHRyYWN0T2RkT2NjdXJyZW5jZQp7CiAgICBjbGFzcyBvZGRPY2N1cnJlbmNlCiAgICB7CiAgICAgICAgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQogICAgICAgIHsKICAgICAgICAgICAgc3RyaW5nIGlucHV0U3RyID0gIkMjLCBTUUwsIFBIUCwgUEhQLCBTUUwsIFNRTCI7CiAgICAgICAgICAgIGNoYXJbXSBzZXBhcmF0b3JzID0gbmV3IGNoYXJbXSB7ICcsJywgJyAnLCAnLicsICctJywgJ18nIH07CiAgICAgICAgICAgIHN0cmluZ1tdIHdvcmRzID0gaW5wdXRTdHIuU3BsaXQoc2VwYXJhdG9ycywgU3RyaW5nU3BsaXRPcHRpb25zLlJlbW92ZUVtcHR5RW50cmllcyk7CiAgICAgICAgICAgIERpY3Rpb25hcnk8c3RyaW5nLCBpbnQ+IHdvcmRDb3VudCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgaW50PigpOwogICAgICAgICAgICBmb3JlYWNoIChzdHJpbmcgd29yZCBpbiB3b3JkcykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKHdvcmRDb3VudC5Db250YWluc0tleSh3b3JkKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB3b3JkQ291bnRbd29yZF0rKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB3b3JkQ291bnQuQWRkKHdvcmQsIDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGUoInsiKTsKICAgICAgICAgICAgZm9yZWFjaCAoS2V5VmFsdWVQYWlyPHN0cmluZyxpbnQ+IHBhaXIgaW4gd29yZENvdW50KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAocGFpci5WYWx1ZSAlIDIgIT0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlKCJ7MH0sIiwgcGFpci5LZXkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJ9LiIpOwogICAgICAgIH0KICAgIH0KfQo=