public void Unit(ProductionRules rules) { List <string> value = new List <string>(); for (int item = 0; item < rules.Count; ++item) { value.AddRange(rules[item].Value.Select(d => d.ToString())); for (int i = 0; i < value.Count; ++i) { if (Helper.IsUpper(value[i]) && value.Count == 1) { string key = rules[item].Key; rules.RemoveAt(item); Console.WriteLine("For {1} -> {0}", value[i], key); foreach (var rule in rules.FindAll(element => element.Key.StartsWith(value[i]))) { rules.Add(key, rule.Value); } } value.Clear(); } } Helper.GetDistinct(rules); }