@Override
    protected void placeWord(int row, int col) throws FillWordException {
        if (row < 0 && col < 0 && swaps < swapLimit
                && (-row > board.length)) {
            // Swap the word and deduct the points.
            System.out.println("Grow board, discard word " + wordToPlay
                + " at a cost of " + ((-row)+wordToPlay.length())
                + " points.");
            int newsize = -row ;
            int lognew = (int)(Math.ceil(Math.log10((double)newsize)
                / Math.log10(2.0)));
            int logold = (int)(Math.ceil(Math.log10((double)board.length)
                / Math.log10(2.0)));
            int penalty = newsize ; //(newsize*logold) - (board.length);
            score -= wordToPlay.length() + penalty ;
            char [][] newboard = new char[newsize][newsize];
            for (int r = 0 ; r < newsize ; r++) {
                for (int c = 0 ; c < newsize ; c++) {
                    if (r < board.length && c < board.length) {
                        newboard[r][c] = board[r][c] ;
                    } else {
                        newboard[r][c] = EMPTY ;
                    }
                }
            }
            board = newboard ;
            if (row == col) {
                wordSizeLimit = newsize ;
                System.out.println("Word length limit set to "
                    + newsize + ".");
            }
            wordToPlay = pickWord();
            swaps++ ;
            isacross = ! isacross ;
            return ;
        }
        placeWord(row, col, true);
    }