using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    public static class Extention
    {
        public static int[,] CreateMatrixWithoutColumn(this int[,] matrix, int column)
        {
            var result = new int[matrix.GetLength(0), matrix.GetLength(1) - 1];
            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                for (int j = 0; j < matrix.GetLength(1) - 1; j++)
                {
                    result[i, j] = j < column ? matrix[i, j] : matrix[i, j + 1];
                }
            }
            return result;
        }

        public static int[,] CreateMatrixWithoutRow(this int[,] matrix, int row)
        {
            var result = new int[matrix.GetLength(0) - 1, matrix.GetLength(1)];
            for (int i = 0; i < matrix.GetLength(0) - 1; i++)
            {
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    result[i, j] = i < row ? matrix[i, j] : matrix[i + 1, j];
                }
            }

            return result;
        }

        public static double CalculateDeterminant(this int[,] matrix)
        {
            if (matrix.GetLength(0) == 2)
            {
                return matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0];
            }
            double result = 0;
            for (var j = 0; j < matrix.GetLength(0); j++)
            {
                result += (j % 2 == 1 ? 1 : -1) * matrix[1, j] *
                    matrix.CreateMatrixWithoutColumn(j).CreateMatrixWithoutRow(1).CalculateDeterminant();
            }
            //Console.WriteLine("Ко мне пришли с размером " + matrix.GetLength(0));
            return result;
        }
    }
}