using System.Collections;
using System.Collections.Generic;
public static void Main()
IEnumerable<char> s = "ABC";
var l = new List<char>(s);
public IEnumerable<IEnumerable<T>> Combinations<T>(IEnumerable<T> iterable, int r)
int n = iterable.Count();
int[] range = Enumerable.Range(0, r).ToArray();
int[] reversedRange = range.Reverse().ToArray();
IEnumerable<T> firstOutput, output;
firstOutput = range.Select(x => iterable.ElementAt(x)).ToArray();
yield return firstOutput;
for (; i < range.Length; i++)
if (range.ElementAt(reversedRange.ElementAt(i)) != reversedRange.ElementAt(i) + n - r)
if (breakWhile < 0) break;
range[reversedRange.ElementAt(i)] += 1;
foreach (int j in Enumerable.Range(reversedRange.ElementAt(i) + 1, r - (reversedRange.ElementAt(i) + 1)))
range[j] = range[j - 1] + 1;
output = range.Select(x => iterable.ElementAt(x)).ToArray();