private Chain GenerateChain(Alphabet alphabet, int i, int length)
{
// next sequence
var chain = new Chain(length);
// Переменная для хранения остатка от деления на основание системы счисления (Мощность алфавита)
int temp = i;
// index of currently generated sequence
int index = 0;
// cycle through elements
for (int j = length - 1; j >= 0; j--)
{
var element = (int)(temp / Math.Pow(alphabet.Cardinality, j));
chain.Set(alphabet[element], index);
temp = (int)(temp % Math.Pow(alphabet.Cardinality, j));
index++;
}
return chain;
}