помогите разобраться с задачей.
Задана клетчатая доска размером

. Требуется распилить её на наибольшее количество частей так, чтобы любые две части были различны. Каждая часть должна состоять из одной или нескольких клеток и представлять собой связную по стороне фигуру. Части, отличающиеся только поворотом, считаются одинаковыми. Цвет клетки не учитывается. Так, существует только одна фигура, состоящая из одной клетки.
Исходные данные

, длина стороны доски

.
Желательно, что был программный алгоритм