This is truly faithful Fillit version, based on the algorithm X and dancing links method
The purpose is to make the smallest possible "square" (which can contain holes) with a given list of tetriminos, but the disposition must be as such that it returns the first possible solution when placing them recursively from the top left.
Here is an example of valid map of Tetriminos (maximum of 26 blocks) which the code fits in the solution below:
By changing the macros in the header file, you can configure the program to work in other modes: