Pythonを使って3次元配列の組み合わせを求めることに困っています。

liの番号はそれぞれli1~3に対応しており、結果を表す3次元配列lifinを求めたいです。

start=0
goal=10
li1=[2,3]
li2=[5,7]
li3=[8,9]

li=[[1],[1,2],[2,3],[1,2,3]]

始点(start)は0、終点(goal)は10を表しています。

例えばli[1]=[1,2]ですが、これはstart→li1→li2→goalを表していて,結果として以下の様なものが導出して欲しいです。
[[0,2,5,10],[0,2,7,10],[0,3,5,10],[0,3,7,10]]

最終的に、以下のlifinの様な結果を求めたいです。

lifin=[[[0,2,10],[0,3,10]],
       [[0,2,5,10],[0,2,7,10],[0,3,5,10],[0,3,7,10]],
       [[0,5,8,10],[0,5,9,10],[0,7,8,10],[0,7,9,10]],
       [[0,2,5,8,10],[0,2,5,9,10],[0,2,7,8,10],[0,2,7,9,10],[0,3,5,8,10],[0,3,5,9,10],[0,3,7,8,9,10],[0,3,7,9,10]]]

よろしくお願いします。