using System.Collections.Generic;
public static void Main()
var arrangements = new Arrangements("123456789");
var result = arrangements.panel_shuffles(4);
Console.WriteLine(result.Count);
foreach (var item in result)
public class Arrangements
private string initialNames;
public Arrangements() : this(PrepareList())
public Arrangements(string thenames)
public static string PrepareList()
for (int i = 0; i < 26; i++)
for (int i = 0; i < 26; i++)
public List<string> panel_shuffles(int n)
if(n>initialNames.Length)
throw new Exception(n.ToString());
var currentNames = initialNames.Substring(0, n);
var result = new List<string>();
result.Add(currentNames);
result.AddRange(panel_shuffle(currentNames, 0));
public List<string> panel_shuffle(string str, int pos)
var result = new List<string>();
var str2 = str.Substring(0,pos);
str2 += str.Substring(pos+2);
result.AddRange(panel_shuffle(str, pos+1));
result.AddRange(panel_shuffle(str2, pos+2));
public double panel_count(int n)
return fibonacci(0, 1, n);
public int fibonacci(int a, int b, int n)
return fibonacci(b, a + b, n);