double uBound=0;
int maxRaiser,parameterN,stopCover,callUpperBound;
double MaxCost;
int MaxRunTime;
long NumCalls;

FILE *NAME;
 float StartTime,StopTime;



//structure, where is kept linkt to set of columns included to solution

struct header_of_solution_UCP {
  long Cost;
  struct CLink *SetC;//Link to set of columns
};




//structure to keep domains of covering matrix for Aura 
struct Domain {
  struct CLink *SetC;
  int cheapestColumn;
  int numberOfRow;
  int countOfCols;
  struct Domain *Next;
  struct Domain *Previous;
};

struct cube {
  
  struct Domain *link_To_Domain;
  int counfOfDomain;
  int countOfCheapestCols;
  struct cube *Next;
};
struct header_Of_Cubes {
  
  struct cube *link_To_Cube;
  int countOfCubes;
  
};



//structure, where is kept linkt to set of rows included to MSIR

struct header_Of_Set_MSIR {
   struct set_Of_Rows_MSIR *RowsLink;
   int MSIR;
};

//structure where are kept row links an column links
struct CLink {
   struct CLink *Previous;
   struct CLink *Next;
   int ID;
   int Offset; //Offset to jump from one item to next
   int Cost;
   int NumberOf1;
   };

//Structure where is kept the matrix
struct CoveringMatrix {
  struct CLink *RowLink;  //Link to rows of matrix
  struct CLink *ColLink;  //Link to columns of matrix
  long Cost;
  int Dirty;
  int countOfCols;        //countOfCols je pocet sloupcu
  int countOfRows;		 //countOfRows je pocet radku + 1, (1 pro uchovani cen sloucu)
  int MSIR;			//pridano pro tvoreni doplnkove matice MSIR k matici, kde radky MSIR chybi
  int countOfOnes;
  char * *Array;    //Matice
  int lbound;
};
struct CovMatrix *SelectSolver (struct CovMatrix *CVM,struct CovSol * best,int Solver,int MaxTime);
struct CovMatrix *AutoSelectSolver (struct CovMatrix *CVM,struct CovSol * best,int MaxAuraRunTime,int effort,int endcov);