#ifndef Head
#define Head

    #define MAX_MATRIX_ALIVE 21
    
    typedef struct {
        int rows;
        int cols;
        int** data;
    } MATRIX2D;

    void create_matrix(MATRIX2D** addr, unsigned char n, int rows, int cols);
    void input_matrix(MATRIX2D** addr, unsigned char n);
    void get_matrix(MATRIX2D** addr, unsigned char n);
    void logic_matrix(MATRIX2D** addr, unsigned char n1, unsigned char n2);
    void edit_matrix(MATRIX2D** addr, unsigned char n);
    void matrix_random(MATRIX2D** addr, unsigned char n);
    void copy_matrix(MATRIX2D** addr, unsigned char n1, unsigned char n2);
    void free_matrix(MATRIX2D** addr, unsigned char n);
    void get_matrix_col(MATRIX2D** addr, unsigned char n, int c);
    void get_matrix_row(MATRIX2D** addr, unsigned char n, int r);
    void transp_matrix(MATRIX2D** addr, unsigned char n);
    long long int determ_matrix(MATRIX2D** addr, unsigned char n);
    void obr_matrix(MATRIX2D** addr, unsigned char n);
    void is_Matrix_Exist(MATRIX2D** addr, unsigned char n);


#endif
