using System.Collections.Generic;
public static void Main()
var blue = new List<int> {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
var red = new List<int> {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2};
var green = new List<int> {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3};
var all = new List<List<int>> {blue, red, green};
for (var x = 0; x <= 100; x++)
var groupFirst = r.Next(0, 2);
var groupSecond = r.Next(0, 1);
var group1 = all[groupFirst];
var group2 = all.SkipWhile(a => all.IndexOf(a) != groupFirst).ToList()[groupSecond];
var chamFirst = group1[r.Next(1, group1.Count()) -1];
var chamSecond = group2[r.Next(1, group2.Count())-1];
var cham1 = group1[chamFirst];
var cham2 = group2[chamSecond];
Console.WriteLine($"{chamFirst}/{r.Next(1, group1.Count())} - {chamSecond}");
if (cham1 != 3 && cham2 != 3)
all = GetNewList(all, group1, group2, chamFirst, chamSecond, 3);
else if (cham1 != 2 && cham2 != 2)
all = GetNewList(all, group1, group2, chamFirst, chamSecond, 2);
else if (cham1 != 1 && cham2 != 1)
all = GetNewList(all, group1, group2, chamFirst, chamSecond, 1);
public static List<List<int>> GetNewList(List<List<int>> all, List<int> group1, List<int> group2, int cham1, int cham2, int num)
newList[newList.IndexOf(group1)][cham1] = num;
newList[newList.IndexOf(group2)][cham2] = num;
public static T[] RemoveAt<T>(T[] source, int index)
T[] dest = new T[source.Length - 1];
Array.Copy(source, 0, dest, 0, index);
if( index < source.Length - 1 )
Array.Copy(source, index + 1, dest, index, source.Length - index - 1);