1) Перестановки 2) Разрывающее множество вершин и рёбер
11

                if (Int64.TryParse(textBox3.Text, out k) && k >= 1 && k <= Factorials[N - 1])

                {

                    bool[] used = new bool[N];

                    for (int i = 0; i < N; i++)

                        used[i] = false;

 

                    int[] a = new int[N];

 

                    k--;

 

                    for (int i = 0; i < N - 1; i++)

                    {

                        int x = Convert.ToInt32(k / Factorials[N - 2 - i]);

                        k %= Factorials[N - 2 - i];

 

                        int count = -1, j = 0;

                        for ( ; count != x; j++) //пока не отсчитаем х

                            if (!used[j]) count++; //считаем неиспользованные числа

 

                        a[i] = j;

                        used[j-1] = true;

                    }

 

                    for (int i = 0; i < N; i++)

                        if (!used[i])

                        {

                            a[N - 1] = i + 1;

                        }

 

                    string s = GetString (a);

                    textBox4.Text = s;

                }

 

                else

                {

                    textBox3.Text = "";

                    var result = MessageBox.Show("Номер перестановки - натуральное число 1 <= k <= N!",

                                     "Ошибка ввода k",

                                     MessageBoxButtons.OK,

                                     MessageBoxIcon.Error);

                }

 

            }

            else

            {

                textBox2.Text = "";

                var result = MessageBox.Show("Порядок группы перестановок - натуральное число N >= 1",

                                 "Ошибка ввода N",

                                 MessageBoxButtons.OK,

                                 MessageBoxIcon.Error);

            }

        }

 

        //-------------------------------------------------------------------------------------- получение номера по перестановке

 

        private void button3_Click(object sender, EventArgs e)

        {

            string s = textBox5.Text;

            string[] words = s.Split(default(string[]), StringSplitOptions.RemoveEmptyEntries);