private function populate()
    {
        foreach ($this->words as $word) {
            $rowOrColumn = rand(1, 2);

            if ($rowOrColumn == 1) {
                shuffle($this->rowsAvailable);

                foreach ($this->rowsAvailable as $key => $row) {
                    $maxStart = ($this->size - Utils::stringLength($word));
                    $startOptions = Utils::integerAsOptions($maxStart);
                    foreach ($startOptions as $startIndex) {
                        if ($this->tryWordInRow($word, $row, $startIndex)) {
                            $this->insertWordIntoRow($word, $row, $startIndex);
                            unset($this->rowsAvailable[$key]);
                            break(2);
                        }
                    }
                }
            } else {
                shuffle($this->columnsAvailable);

                foreach ($this->columnsAvailable as $key => $column) {
                    $maxStart = ($this->size - Utils::stringLength($word));
                    $startOptions = Utils::integerAsOptions($maxStart);
                    foreach ($startOptions as $startIndex) {
                        if ($this->tryWordInColumn($word, $column, $startIndex)) {
                            $this->insertWordIntoColumn($word, $column, $startIndex);
                            unset($this->columnsAvailable[$key]);
                            break(2);
                        }
                    }
                }
            }
        }
    }