Podemos simular diretamente o espalhamento da água. Cada posição molhada gera
novas posições molhadas segundo as regras do enunciado:
\begin{itemize}
    \item se a célula imediatamente abaixo está dentro da matriz e é
    \texttt{.}, ela também fica molhada;
    \item se existe uma prateleira imediatamente abaixo da posição atual, a água
    pode se espalhar para a esquerda e para a direita na mesma linha.
\end{itemize}

Para evitar processar a mesma posição várias vezes, sempre que uma célula
\texttt{.} fica molhada, trocamos seu caractere para \texttt{o} e a colocamos em
uma fila. Enquanto a fila não estiver vazia, removemos uma posição e tentamos
aplicar os movimentos descritos acima.

As prateleiras nunca viram água, portanto células com \texttt{\#} são apenas
obstáculos que podem sustentar o espalhamento lateral.

Como cada célula da matriz é inserida na fila no máximo uma vez, a complexidade
de tempo é $O(N \cdot M)$. A matriz e a fila também usam $O(N \cdot M)$ de
espaço.
