#ifndef _dlx_h
#define _dlx_h
#include <stdlib.h>
#include <limits.h>
typedef unsigned int depth_t;
typedef int column_name;
#define COLUMN_NAME_MAX INT_MAX
#define COLUMN_NAME_MIN INT_MIN
/*
* Column and data object
*/
struct cell {
struct cell *L;
struct cell *R;
struct cell *U;
struct cell *D;
struct cell *C;
size_t S;
column_name N;
};
struct cell *create_empty_matrix();
void free_matrix(struct cell *h);
int add_set(struct cell **xp, column_name *set, size_t n_set_elem);
int dlx_solve(const struct cell *h, depth_t k, struct cell ***output_arr, size_t *output_arr_size);
int solve(const struct cell *h, size_t suggested_set_size, int ***set_covers, size_t **set_cover_sizes, size_t *n_sets);
#endif