Есть задача выводить плитку рандомных элементов с ячейками 1x1. 1x2, 2x1:

Все найденные плагины (masonry, isotope, nested) почему-то не учитывают дыры в середине (по размером все сходится точно) и плитка получается рваная.
Пример:
https://jsfiddle.net/hqj2z94e/

Это, конечно, в зависимости от изначального порядка блоков – если их перемешать определенным образом, то все встает ровно.
Есть хаки или альтернативные плагины учитывающие такой нюанс?
P.S.: элементов выводится всегда достаточное кол-во, чтобы плитка была именно замкнутой, цельной.