typedef struct {
    const unsigned int x;
    const unsigned int y;
    void*** ptr;
} matrix2d;

matrix2d* create_matrix2d(unsigned int x, unsigned int y);
void deconstruct_matrix2d(matrix2d* mat);
void print_matrix2d(matrix2d* mat);
void fill_rand_matrix2d(matrix2d* mat);
void set_elem_matrix2d(matrix2d* mat, void* elem, unsigned int x, unsigned int y);
bool not_equal_mtrx(matrix2d* matA, matrix2d* matB);
bool equal_mtrx(matrix2d* matA, matrix2d* matB);
matrix2d* get_row_matrix2d(matrix2d* mat, int y);
matrix2d* get_column_matrix2d(matrix2d* mat, int x);
matrix2d* transpond_mtrx(matrix2d* mat);
