数列の末尾に追加する。保留中の数に追加する。保留中の数があるなら、最大のものを取り数列の末尾に追加する。保留中の数が無くなったら操作を終了する。操作とその結果の数列は、以下の性質を満たす。操作によってできた数列はよい数列である。任意のよい数列は、ある操作列から作られる。操作列が異なると、できあがる数列は異なる。数がどの操作によって追加されたかで色分けをする。操作をするごとに減るので、単調減少する。保留中の数の最大値から順に取り出すので、単調減少する。したがって、同色の数を抜き出して作った列はそれぞれ単調減少となる。これらを組み合わせて作った数列は、明らかに高々2つの減少列に分割される。任意のよい数列を次の「貪欲」な方法で分割する。直前に赤く塗った数より小さく、最も左に出現する数を赤く塗る。塗れる数が無くなるまで↑の操作を繰り返す。赤く塗った以外の数を青で塗る。赤と青で塗られた数列はそれぞれ単調減少となっている。赤く塗られた数は操作(1)で追加、青く塗られた数は操作(2)で退避させてから操作(3)で追加できる。任意の状態において、次に(1)または(3)が行われるまでの操作列が異なるとそれらが等しくなりえないことを示す。あるため、追加される数は異なる。操作を漸化式に翻訳すればDPの更新式が得られる。個溜まった時点で以降の操作をやめれば良い。大きな数から処理をしているので、操作によりできた数列は(条件2)の条件を自動的に満たす。この時点で保留中の数を昇順に並べたものが、1から右の残りになる。n-k個こちらは簡単。これを左右から自由にとって並べる場合の数を考えよう。デックの最後の数が、出来上がる数列の何番目にできるかで場合分けする。