using System;
using System.Linq;
using System.Collections.Generic;
public class Test
{
static void CollectAll(ISet<String> remaining, IList<string> soFar, List<List<string>> all) {
if (soFar.Count != 0) {
all.Add(soFar.ToList());
}
foreach (var item in remaining.ToList()) {
remaining.Remove(item);
soFar.Add(item);
CollectAll(remaining, soFar, all);
soFar.Remove(item);
remaining.Add(item);
}
}
public static void Main()
{
var items = new HashSet<string> {"a", "b", "c"};
var tmp = new List<string>();
List<List<string>> res = new List<List<string>>();
CollectAll(items, tmp, res);
foreach (var lst in res) {
Console.WriteLine(string.Join(" ", lst.ToArray()));
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglzdGF0aWMgdm9pZCBDb2xsZWN0QWxsKElTZXQ8U3RyaW5nPiByZW1haW5pbmcsIElMaXN0PHN0cmluZz4gc29GYXIsIExpc3Q8TGlzdDxzdHJpbmc+PiBhbGwpIHsKCQlpZiAoc29GYXIuQ291bnQgIT0gMCkgewoJCQlhbGwuQWRkKHNvRmFyLlRvTGlzdCgpKTsKCQl9CgkJZm9yZWFjaCAodmFyIGl0ZW0gaW4gcmVtYWluaW5nLlRvTGlzdCgpKSB7CgkJCXJlbWFpbmluZy5SZW1vdmUoaXRlbSk7CgkJCXNvRmFyLkFkZChpdGVtKTsKCQkJQ29sbGVjdEFsbChyZW1haW5pbmcsIHNvRmFyLCBhbGwpOwoJCQlzb0Zhci5SZW1vdmUoaXRlbSk7CgkJCXJlbWFpbmluZy5BZGQoaXRlbSk7CgkJfQoJfQoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciBpdGVtcyA9IG5ldyBIYXNoU2V0PHN0cmluZz4geyJhIiwgImIiLCAiYyJ9OwoJCXZhciB0bXAgPSBuZXcgTGlzdDxzdHJpbmc+KCk7CgkJTGlzdDxMaXN0PHN0cmluZz4+IHJlcyA9IG5ldyBMaXN0PExpc3Q8c3RyaW5nPj4oKTsKCQlDb2xsZWN0QWxsKGl0ZW1zLCB0bXAsIHJlcyk7CgkJZm9yZWFjaCAodmFyIGxzdCBpbiByZXMpIHsKCQkJQ29uc29sZS5Xcml0ZUxpbmUoc3RyaW5nLkpvaW4oIiAiLCBsc3QuVG9BcnJheSgpKSk7CgkJfQoJfQp9