0+sufN=pre1+sufN−1=pre2+sufN−2=...=preN+0であることに注目する。この等式より、pren=sufnは入力全体の和/(N+1)と一致しなければならない。この数が入力の中に2つなければ答えは0である。
さて、この2数を除いた2(N−1)個の数の中から残りを埋めることになる。まず、ai+bi=Sになるような数の組み合わせを入力から探す。これらを
{a1,b1},{a2,b2},...,{ak,bk}
とするとき、すべてのpについてapとbpは入力の中に必ず同数存在しなければならない。逆に同数あれば、prei=apのときsufN−i=bp(prei=bpのときsufN−i=ap)のように埋めていけば有効な列ができることになる。
{a1,b1},{a2,b2},...,{ak,bk}がそれぞれc1,...,ckペアあるとわかったら、あとは{a1,b1}から順にN−1個の位置を埋めていけばよい。つまり、
(c1N−1)2c1⋅(c2N−1−c1)2c2⋅...⋅(ckN−1−c1−...−ck−1)2ck
が答えになる。N−1箇所の空きからc1個選んで、さらにa1とb1のどちらを置くか選んで…… というイメージ。ai=biのケースは2掛けがないので注意すること。
冒頭の事実に気づくのになんと二日かかってしまった。