Entrevista do Google: arranjo de blocos

Você recebe N blocos de altura 1… N. De quantas maneiras você pode organizar esses blocos em uma linha tal que, quando vistos da esquerda, você vê apenas blocos L (os demais são ocultos por blocos mais altos) e quando vistos da direita, vê apenas blocos R? Exemplo dadoN=3, L=2, R=1 existe apenas um arranjo{2, 1, 3} enquanto paraN=3, L=2, R=2 existem duas maneiras{1, 3, 2} e{2, 3, 1}.

Como devemos resolver esse problema programando? Alguma maneira eficiente?

questionAnswers(5)

yourAnswerToTheQuestion