using System.Collections.Generic;
public static void Main()
Console.WriteLine("aaabccccdd".ParseInput());
Console.WriteLine("yyyyyzzzzzzzzzz".ParseInput());
Console.WriteLine("abcd".ParseInput());
Console.WriteLine("hhhccchhhccc".ParseInput());
public static class Extensions
public static string ParseInput(this string input)
return string.Join("", input.GroupWhile().Select(x => $"{x.Key}{(x.Count > 1 ? x.Count.ToString() : null)}"));
public static IEnumerable<GroupedList<T>> GroupWhile<T>(this IEnumerable<T> items) where T : struct
var res = new List<GroupedList<T>>();
GroupedList<T> innerList = null;
innerList = new GroupedList<T>(i);
public class GroupedList<T> : List<T>
public GroupedList(T key) => (Key) = (key);