TL; DR
これが Iota による HelloWorld です。注目すべきなのは、このプログラムはたった一個の組み込み関数 i
だけで作られているということです。
i(i(i(i)))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))(i(i))))(i(i(i(i))))))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i)))(i(i)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))(i(i))))(i(i(i(i))))))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i)))(i(i))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))(i(i))))(i(i(i(i))))))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i)))(i(i)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))(i(i))))(i(i(i(i))))))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i)))(i(i)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))(i(i))))(i(i(i(i))))))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i)))(i(i))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))(i(i))))(i(i(i(i))))))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i)))(i(i)))))))))))))))))))))))))))))))))))))))))))))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))(i(i))))(i(i(i(i))))))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i)))(i(i)))))))))))))))))))))))))))))))))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))(i(i))))(i(i(i(i))))))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i)))(i(i))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))(i(i))))(i(i(i(i))))))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i)))(i(i))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))(i(i))))(i(i(i(i))))))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i)))(i(i)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))(i(i))))(i(i(i(i))))))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i)))(i(i)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))(i(i))))(i(i(i(i))))))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i)))(i(i)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))(i(i))))(i(i(i(i))))))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i)))(i(i))))))))))))))))))))))))))))))))))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))(i(i))))(i(i(i(i))))))))(i(i(i(i)))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i(i))))(i(i(i(i(i))))(i(i(i(i)))(i(i(i(i(i))))))(i(i(i(i)))))(i(i(i(i)))(i(i)))))))))))))(i(i(i(i)))(i(i(i(i)))))))))))))))))))
ラムダ計算とは
Iota によるプログラミングのためにはラムダ計算の知識が必要不可欠です。ラムダ計算についてはすでに素晴らしい記事があるので、ここではざっくりと説明していきます。
ラムダ計算は計算模型の一種です。計算模型とは、噛み砕いて説明すれば「如何にして計算を行うか?」を表現したものです。現代のコンピュータが「チューリングマシン」をもとに作られていることは有名な話ですが、このチューリングマシンも計算模型の一種です。
ただしラムダ計算はチューリングマシンとは全く違った方法で計算を実現します。ラムダ計算による計算は以下のように記述されます。
$$
\lambda\text{[引数]}.\text{[返り値]}
$$
具体例として、「受け取った引数をそのまま返す関数」はこのように書けます。
$$
\lambda x.x
$$
また、「受け取った自然数に 1 を足して返す関数」はこのようになります。
$$
\lambda x.x + 1
$$
ただし純粋なラムダ計算には "+" や "-" のような演算もなければ "1" や "2" といった自然数もないので、これらは別途定義する必要があります。これについては後で説明します。
こうして表記した関数の右側に引数を置きます。
$$
(\lambda x.x + 1)\ 4 = 5
$$
「受け取った自然数に 1 を足して返す関数」に 4 を渡したので、結果は $4 + 1 = 5$ となります。
また、関数に関数を渡すこともできます。こんな感じです。
$$
(\lambda f.f\ 7)(\lambda x.x + 1)
$$
この式においては $\lambda f.f\ 7$ が関数に、$\lambda x.x + 1$ が引数に当たります。よって計算結果はこのようになります。
\begin{align*}
& (\lambda f.f\ 7)(\lambda x.x + 1) \\
=\ & (\lambda x.x + 1)\ 7 \\
=\ & 8
\end{align*}
Python で再現するとこんな感じです。
result = (lambda f: f(7))(lambda x: x + 1)
print(result) # 8
最初は少し混乱すると思いますが、すぐ慣れます。
カリー化
今のままでは引数が一個の関数しか作れないので、「$n$ と $m$ の和を求める関数」などが作れません。そこでカリー化という考え方を用います。先に結論からお見せすると「$n$ と $m$ の和を求める関数」はこのようになります。
$$
\lambda n. \lambda m. n + m
$$
これ、何が起きているかわかるでしょうか。試しにこの関数に "3" を渡してみます。
$$
(\lambda n. \lambda m. n + m)\ 3 = \lambda m. 3 + m
$$
$\lambda n. \lambda m. n + m$ という式に 3 が渡された結果、「引数 $m$ に 3 を足した値を返す関数」である $\lambda m. 3 + m$ が返ってきました。これにさらに 5 を渡してみましょう。
$$
(\lambda m. 3 + m)\ 5 = 8
$$
無事に $3 + 5 = 8$ が求まりました。今やったことを Python で表現するとこんな感じになります。
result = (lambda n: lambda m: n + m)(3)(5)
print(result) # 8
このように、一引数関数しかなくても「事実上の多引数関数」は作れるのです。これを関数のカリー化といいます。
ただし $\lambda n. \lambda m. n + m$ という書き方は少し冗長なので、普通は $\lambda nm. n + m$ と、あたかも二引数関数であるかのような書き方をします。
ラムダ計算によるプログラミング
ではこんなものでどのようにプログラミングを行うのでしょうか。それを考える前に、そもそも「プログラムとは何ぞや?」ということについて考えます。
プログラムの代表例として、Linux の基本的なコマンドをいくつか見ていきましょう。まずは echo
です。
$ echo hoge
hoge
echo
というプログラムに "hoge" という文字列を渡したところ、画面には "hoge" という文字列が表示されました。
次に bc
です。
$ echo "3+9" | bc
12
bc
に "3+9" という文字列を渡したところ、計算結果を表す "12" という文字列が返ってきました。
最後に sed
です。
$ echo "hello, world" | sed "s/hello/goodbye/"
goodbye, world
"hello, world" という文字列を変形した "goodbye, world" という文字列が表示されています。
さて今あげた三つの例には「文字列を受け取り、文字列を返す」という共通点がありました。つまり「プログラム」とは、極限まで単純化すれば「文字列から文字列への写像」なのです。
先ほど「現代的コンピュータの基礎となっているもの」としてチューリングマシンを挙げましたが、これなどまさに「文字列を受け取って文字列を返すもの」の最たる例です。チューリングマシンはテープに書き込まれた文字を入力として受け取り、それを所定の動作に従って書き換えたものが出力に当たるからです。
そういうわけで、ラムダ計算でのプログラミングを実現するにはチューリングマシンのように文字列を処理する仕組みが必要になります。一体どうすればよいのでしょうか?
チャーチエンコーディング
ラムダ計算においては、文字列を自然数の列として扱います。例えば "hello" という文字列の場合、まずはこれを
{
文字 'h' を表す自然数, 文字 'e' を表す自然数, ...
}
といった具合に表します。文字に対する自然数の割り当てとして ASCII コードを用いれば、"hello" は {104, 101, 108, 108, 111} と表現されます。
しかしここで一つの問題が立ち現れます。先ほどこんなことを言っていたのを覚えているでしょうか。
ただし純粋なラムダ計算には "+" や "-" のような演算もなければ "1" や "2" といった自然数もないので、これらは別途定義する必要があります。これについては後で説明します。
ラムダ計算には自然数という概念はありません。というか、ラムダ計算には「一つのラムダ式を受け取って一つのラムダ式を返すラムダ式」しかありません。先ほどは $\lambda x.x + 1$ のような式を作っていましたが、あれはただの方便です。
しかし、こんなラムダ式でも自然数を表す方法は存在するのです。その代表例がアロンゾ・チャーチによるチャーチエンコーディングです。これは具体例を見ていただくのが早いでしょう。
\begin{align*}
0 &= \lambda fx.x \\
1 &= \lambda fx.fx \\
2 &= \lambda fx.f(fx) \\
\vdots
\end{align*}
このように、チャーチエンコーディングでは自然数 $N$ を「$f$ と $x$ を受け取り、『$x$ に $f$ を $N$ 回適用したもの』を返す関数」と表します。
なんだか狐につままれたような感じですが、これでうまくいくのです。詳細は先ほどの記事にもありますが、この自然数に対し足し算でも掛け算でも、階乗すらも計算することができます。
スコットエンコーディング
そんな感じで自然数は表せました。しかしこれだけではダメです。さきほど「"hello" という文字列は {104, 101, 108, 108, 111} という自然数のリストで表現される」とお話ししました。つまり、「自然数」を表現する方法に加えて「リスト」を表現する方法も必要になります。これを実現するのがデイナ・スコットによるスコットエンコーディングです。スコットエンコーディングでは以下のような関数を定めます。
\begin{align*}
\mathrm{emptyList} &= \lambda fxy.x \\
\mathrm{cons} &= \lambda abf.fab \\
\mathrm{car} &= \lambda p.p(\lambda xy.x) \\
\mathrm{cdr} &= \lambda p.p(\lambda xy.y)
\end{align*}
LISP をやったことがある方は見覚えのある名前だと思います。まず $\mathrm{cons}$ は二つの引数を組み合わせて一組の「ペア」を作る関数になります。つまり、$\mathrm{cons}\ b\ a$ で「a と b を組み合わせたペア」になります。これを用いて以下のようにリストを定義します。
\begin{align*}
\{\} &= \mathrm{emptyList} = \lambda fxy.x \\
\{a\} &= \mathrm{cons}\ a\ \{\} \\
\{b, a\} &= \mathrm{cons}\ b\ (\mathrm{cons}\ a\ \{\}) \\
\{c, b, a\} &= \mathrm{cons}\ c\ (\mathrm{cons}\ b\ (\mathrm{cons}\ a\ \{\})) \\
&\vdots
\end{align*}
このように、$\mathrm{cons}\ \text{追加する要素}\ \text{追加先のリスト}$ としてリストに要素を追加し続けることができるのです。
また $\mathrm{car}$ と $\mathrm{cdr}$ ですが、これはそれぞれ「リストの先頭要素を取り出す関数」と「リストから先頭要素を除いたリストを取り出す関数」です。実際に計算してみるとわかるのですが、$\mathrm{car}(\mathrm{cons}\ c\ (\mathrm{cons}\ b\ (\mathrm{cons}\ a\ \{\})))$ は $c$ になり、$\mathrm{cdr}(\mathrm{cons}\ c\ (\mathrm{cons}\ b\ (\mathrm{cons}\ a\ \{\})))$ は $\mathrm{cons}\ b\ (\mathrm{cons}\ a\ \{\})$ となります。
ラムダ計算の処理手順
さてこれで文字列を「自然数のリスト」として表現する手立てが整いました。ラムダ計算によるプログラムは以下のような処理手順になります。
- 入力文字列を自然数のリスト(を表現したラムダ式)に変換する。これを $L$ と置く。
- プログラムにあたるラムダ式 $P$ に $L$ を渡し、$P\ L$ を求める。
- $P\ L$ を自然数のリストと解釈し、文字列に戻して出力する。
例えば、以下のラムダ式が「プログラム」であるとします。
$$
\lambda x.x
$$
これに入力文字列 "hogehoge" を食わせます。
$$
\lambda x.x\ (\text{"hogehoge" という文字列を表現したラムダ式})
$$
$\lambda x.x$ は入力をそのまま返す関数でしたから、これは結局文字列 "hogehoge" を表現したラムダ式が返ってくることになります。つまり、これはラムダ式による echo の実装 になります。
別の例も見てみましょう。
$$
\lambda x.(\text{"Hello, World!" という文字列を表現したラムダ式})
$$
このプログラムは「引数の内容には一切関係なく "Hello, World!" という文字列を返す関数」になります。つまり、こちらは HelloWorld の実装になります。
このような仕組みによりラムダ計算で「文字列を受け取って文字列を返す」ことが可能になりました。実際、ラムダ計算はチューリング完全であることが証明されています。つまりラムダ式をうまく設計してやれば、任意のチューリングマシンを模倣することが可能になるのです。
SKI コンビネータ
ラムダ計算はとても単純な決まり事のみでチューリング完全性を達成していたわけですが、さらに単純化することもできます。実は、任意のラムダ式は以下の三つの式の組み合わせのみで表現できることが知られているのです。
\begin{align*}
I &= \lambda x.x \\
K &= \lambda xy.x \\
S &= \lambda xyz.xz(yz)
\end{align*}
よってこの $S$, $K$, $I$ の組み合わせもチューリング完全です。この三つをまとめて SKI コンビネータといいます。
「コンビネータ」とは「自由変数を含まないラムダ式」という意味です。自由変数とは、ざっくりと言えば「引数に入っていない変数」のことです。こちらのラムダ式をご覧ください。
$$
\lambda x.fx
$$
このラムダ式は $x$ を受け取って $f x$ を返します。しかしこの $f$ は引数に入っていないので正体不明です。この $f$ のような変数を自由変数と言います。また、自由変数ではない変数は束縛変数と言います。つまり $x$ は束縛変数です。
実は任意のラムダ式 $x$, $y$ に対し $SKxy = y$ が成り立ちます。したがって、$SKx$ は「実質的に $I$ と同じ」といえます(このことを専門的には「外延的に等しい」といいます)。なので $S$ と $K$ だけでもチューリング完全です。
ιコンビネータ
さらに、SKI コンビネータはもっと単純化することもできます。まずは $\iota$1 コンビネータを定義します。
\begin{align*}
\iota &= \lambda f.fSK \\
&= \lambda f.f(\lambda xyz.xz(yz))(\lambda xy.x)
\end{align*}
この $\iota$ ですが、なんとこれ一つで $S$, $K$, $I$ の全てを表せます。
\begin{align*}
I &= \iota\iota \\
K &= \iota(\iota(\iota\iota)) \\
S &= \iota(\iota(\iota(\iota\iota))) \\
\end{align*}
記事冒頭で「たった一個の組み込み関数 i
」だけで HelloWorld をしていましたが、この i
が $\iota$ だったんですね。
このように Iota 言語は「たった一つの関数のみでチューリング完全性を達成する」という離れ業を成し遂げています。この Iota のように、「極めて少ない構成要素のみでチューリング完全性を達成する」ことをチューリング陥穽 (Turing turpit) と言います。
ただし一つ補足しておきます。この「チューリング陥穽」という言葉の元ネタはアラン・パリスの Epigrams on Programming(プログラミングにおける警句集)なのですが、そこではこのように記されています。
54. Beware of the Turing tar-pit in which everything is possible but nothing of interest is easy.
(全てが可能だが、その一方で重要なことは何一つ簡単にはできない「チューリング陥穽」に気をつけろ。)
つまり「チューリング陥穽」という言葉自体は残念ながら誉め言葉とは言えなさそうです。
実装
今回は C++ で実装していきます。実はあること(後述)に目をつぶれば実装は一瞬で終わります。
そもそもラムダ式とは何だったかというと、「ラムダ式を受け取ってラムダ式を返す関数」でした。よって C++ によるラムダ式の実装はこれだけです。
class lambda final : std::function<lambda(lambda)> {
using std::function<lambda(lambda)>::function;
public:
using std::function<lambda(lambda)>::operator();
};
これだけで $S$ も $K$ も $I$ も作れます。
#include <functional>
class lambda final : std::function<lambda(lambda)> {
using std::function<lambda(lambda)>::function;
public:
using std::function<lambda(lambda)>::operator();
};
lambda I = [](lambda x) {
return x;
};
lambda K = [](lambda x) {
return [x](lambda y) {
return x;
};
};
lambda S = [](lambda x) {
return [x](lambda y) {
return [x, y](lambda z) {
return x(z)(y(z));
};
};
};
また、チャーチエンコーディングの実装はこんな感じになります。
lambda church_encode(unsigned n)
{
return [n](lambda f) {
return [n, f](lambda x) {
for (unsigned i = 0; i < n; ++i) {
x = f(x);
}
return x;
};
};
}
unsigned church_decode(lambda n)
{
unsigned decoded = 0;
n(
[&decoded](lambda _){ ++decoded; return _; }
)(
I /* ここは別に何でもいい */
);
return decoded;
}
int main()
{
std::cout << church_decode(church_encode(42)) << std::endl; /* 42 */
}
チャーチエンコーディングによる自然数 $N$ の定義は「$f$ と $x$ を受け取り、『$x$ に $f$ を $N$ 回適用したもの』を返す関数」でしたから、$f$ には「適当な変数をインクリメントする関数」、$x$ にはなんでもいいので適当なラムダ式を渡してやればデコードが可能になります。このままサクサク実装していけば完成・・・
・・・と言いたいところですが、このままではある大問題が発生してしまいます。
「評価戦略」
突然ですが、このラムダ式の計算結果は何になるでしょう。
$$
\lambda x.xx\ (\lambda x.xx)
$$
実際に展開してみましょう。
\begin{align*}
\lambda x.xx\ (\lambda x.xx) &= \lambda x.xx\ (\lambda x.xx) \\
&= \lambda x.xx\ (\lambda x.xx) \\
&= \lambda x.xx\ (\lambda x.xx) \\
& \vdots
\end{align*}
見ての通り、このラムダ式の展開は永遠に終わりません。こういうのを専門的には「正規形が存在しない」といいます。
ちなみに $\lambda x.xx$ は U コンビネータ、$\lambda x.xx\ (\lambda x.xx) (= UU)$ は $\Omega$ コンビネータと呼ばれます。
ではこれを踏まえたうえで、こちらのラムダ式の計算結果はどうなるでしょうか?
$$
(\lambda xy.y)\ (\lambda x.xx\ (\lambda x.xx))\ I
$$
少し見づらいので、$\lambda x.xx\ (\lambda x.xx)$ を $\Omega$ と置きましょう。するとこうなってしまいます。
$$
(\lambda xy.y)\ \Omega\ I = I
$$
なんと、$\Omega$ は永遠に展開が終わらない式であったのにもかかわらず、それを含む式はきちんと計算結果が出てきました。これはすなわち、どうせ $\Omega$ は使わないのだから、そもそも展開する必要もなかったということです。
ところが C++ で実装する場合はこうも行きません。
int main()
{
[](lambda x) { return [](lambda y) { return y; }; }
(
/* こいつの展開は永遠に終わらない */
[](lambda x) { return x(x); }([](lambda x) { return x(x); })
)
(
I
);
/* Command terminated */
}
専門的には、C++ は正格評価という評価戦略を用いています。これはどういうことかというと、まず引数の評価を最後まで終わらせて、そのあとで関数に渡すということです。さきほどは「どうせ $\Omega$ は使わないのだから、そもそも展開する必要もなかった」という話をしましたが、C++ の立場からすれば関数の中で引数が使われるかどうかなんて関係ありません。使う使わないに関わらず、まずは引数をすべて評価してしまうのです。なので、本来であれば評価する必要のない引数まで評価し続けてしまい、メモリを食い尽くして異常終了してしまうわけです。
ところが世の中には正格評価ではない評価戦略、非正格評価をする言語もあります。その代表例が関数型言語 Haskell です。
main = do print $ fst ('a', 1 `div` 0) -- 'a'
このコードは文字 'a' と 1 ÷ 0 のペアを作り、その先頭要素を画面に出力します。つまり画面には 'a' と表示されます。
1 ÷ 0 だなんていかにもエラーが発生しそうな計算です。実際、Haskell でも 1 ÷ 0 を出力しようとすればエラーになります。
main = do print $ 1 `div` 0 -- Main: divide by zero
ところが先ほどの例ではエラーになりません。これはなぜかというと、画面に表示したいのは ('a', 1 `div` 0)
の先頭要素のみであるため、逆に言えばそれ以外の要素はどうせ使わないからです。このように Haskell 等の言語では、値が実際に必要になるまで評価が行われません。これを非正格評価と言います。つまりラムダ式を正しく計算するには非正格評価を行わなければならなかったのです。
しかし正格・非正格はあくまでも言語レベルで定められていることなので、「C++ を使う!」と決めてしまったならば非正格評価を行うことは決してできません。それでは C++ でラムダ式を処理することは不可能なのでしょうか?
いいえ、C++ でも非正格評価を模倣することはできます。このようにするのです。
class lambda final : std::function<lambda(lambda)> {
using std::function<lambda(lambda)>::function;
private:
/* C++ 「本来」の呼び出し。正格評価にあたる。 */
lambda pass_by_value(lambda arg) const
{
return std::function<lambda(lambda)>::operator()(arg);
}
public:
/* 正格評価による呼び出しを無名関数で包むことで遅延させる。 */
lambda operator()(lambda arg) const
{
return [arg, *this](lambda _) {
return pass_by_value(arg).pass_by_value(_);
};
}
friend unsigned church_decode(lambda);
};
/* (中略) */
unsigned church_decode(lambda n)
{
unsigned decoded = 0;
n(
[&decoded](lambda _){ ++decoded; return _; }
)(
I /* ここは別に何でもいい */
).pass_by_value(
I /* ここも別に何でもいい */
);
return decoded;
}
C++ 本来の正格評価には pass_by_value
という名前をつけておき、private
指定することで隠蔽します。そして非正格評価の模倣に当たる部分が operator()
です。ここでは引数 arg
を実際に渡してしまうのではなく、「arg
を渡す」という動作をする関数を返します。これにより arg
が実際に関数に渡されるのを遅延させることができるのです。
ただしプログラムである以上いつかは画面に何かを表示しなければならないので、関数の呼び出しを永遠に遅延させ続けるわけにはいきません。具体的には「チャーチエンコーディングされた整数をデコードするとき」と「スコットエンコーディングされたリストをデコードするとき」の二つはどうしても pass_by_value
による正格評価が必要になります。そこでこれらデコード関数だけは特別に friend
指定しておくわけです。
この手法により非正格評価を再現することが可能になります。このコードを見てください。
int main()
{
lambda foo =
[](lambda x) { return [](lambda y) { return y; }; }
(
/* こいつが永遠に展開されてしまうこともない */
[](lambda x) { return x(x); }([](lambda x) { return x(x); })
)
(
church_encode(42)
);
std::cout << church_decode(foo) << std::endl; /* 42 */
}
さっきまでは関数呼び出しの前に引数を評価していたので異常終了してしまいましたが、今回は無事に必要な引数だけが実際に評価されました。
Hello, World!
以上のような方策を用いることで C++ でもラムダ計算の処理系を実装できます。スコットエンコーディング等の実装の詳細は省略しますが、ここまでくれば何も難しいことは必要ありません。完成品がこちらになります。
それでは満を持して HelloWorld していきます。先ほどもお見せしましたが、HelloWorld に当たるプログラムはこんなラムダ式です。
$$
\lambda x.(\text{"Hello, World!" という文字列を表現したラムダ式})
$$
まずはこのラムダ式を $S$, $K$, $I$ の三つのみで表現します。具体的な変換アルゴリズムはやはりこちらの記事に記されているので、今回は変換結果だけお借りします。
K(S(S(K(S))(S(K(K))(S(K(S))(S(K(S(I)))(K)))))(K(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(K(I))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(S(S(K(S))(S(K(K))(S(K(S))(S(K(S(I)))(K)))))(K(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(K(I)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(S(S(K(S))(S(K(K))(S(K(S))(S(K(S(I)))(K)))))(K(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(K(I))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(S(S(K(S))(S(K(K))(S(K(S))(S(K(S(I)))(K)))))(K(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(K(I))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(S(S(K(S))(S(K(K))(S(K(S))(S(K(S(I)))(K)))))(K(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(K(I)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(S(S(K(S))(S(K(K))(S(K(S))(S(K(S(I)))(K)))))(K(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(K(I))))))))))))))))))))))))))))))))))))))))))))))(S(S(K(S))(S(K(K))(S(K(S))(S(K(S(I)))(K)))))(K(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(K(I))))))))))))))))))))))))))))))))))(S(S(K(S))(S(K(K))(S(K(S))(S(K(S(I)))(K)))))(K(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(K(I)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(S(S(K(S))(S(K(K))(S(K(S))(S(K(S(I)))(K)))))(K(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(K(I)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(S(S(K(S))(S(K(K))(S(K(S))(S(K(S(I)))(K)))))(K(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(K(I))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(S(S(K(S))(S(K(K))(S(K(S))(S(K(S(I)))(K)))))(K(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(K(I))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(S(S(K(S))(S(K(K))(S(K(S))(S(K(S(I)))(K)))))(K(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(K(I))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(S(S(K(S))(S(K(K))(S(K(S))(S(K(S(I)))(K)))))(K(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(K(I)))))))))))))))))))))))))))))))))))(S(S(K(S))(S(K(K))(S(K(S))(S(K(S(I)))(K)))))(K(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(S(S(K(S))(K))(K(I))))))))))))(K(K))))))))))))))))
ここまでくればあとは簡単です。$\iota$ と $S$, $K$, $I$ の関係はこのように↓なっていたので、
\begin{align*}
I &= \iota\iota \\
K &= \iota(\iota(\iota\iota)) \\
S &= \iota(\iota(\iota(\iota\iota))) \\
\end{align*}
この等式に従って機械的に変換すればおしまいです。それが記事冒頭でお見せしたあのコードになります。あとはこれを C++ ソースコードに貼り付けて完成です。
/* Download from https://github.com/reika727/LambdaCpp !!! */
#include "lambda-expression.hpp"
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace lambda::combinators;
int main()
{
/* プログラム本体に当たる部分 */
const lambda::expression program = i(i(i( /* ... 中略 ... */ )));
/* program への引数。ただどうせ使われないので内容は何でもいい */
std::string foo = "HOGE HOGE FUGA FUGA!!!";
/* プログラムの処理結果をデコードしたものがここに入る */
std::vector<char> result;
/* 実行 */
lambda::run_on_integer_sequence(foo.begin(), foo.end(), program, std::back_inserter(result));
/* 結果を文字列として表示 */
for (auto ch : result) {
std::cout << ch;
}
std::cout << std::endl;
}
こちらのプログラムですが、コンパイルには二時間半かかりました。
$ time g++ iota_hello.cpp --std=c++17 && time ./a.out
real 154m21.342s
user 153m46.597s
sys 0m33.498s
Hello, World!
real 3m52.844s
user 3m50.942s
sys 0m1.679s
プログラム自体も、ただの HelloWorld のくせに 3 MB 近くあります。
$ ls -lh a.out
-rwxr-xr-x 1 reika727 reika727 2.8M Mar 22 10:47 a.out
ちょっと深い話
ここからはすこし、いやかなりマニアックなお話です。
0 と 1 による表記
この Iota という言語は実は 0 と 1 だけで記述することができます。
まずこのような文法を考えます。
iota = "0" | "1" iota iota
ここで "0" は $\iota$ 一個に、"1" は 右側のもの二つをまとめる括弧にあたります。といってもわけがわからないと思うので具体例を見てみましょう。"1100100" という文字列から上の文法にしたがって構文木を作るとこのようになります。
1
/ \
1 1
/ \ / \
0 0 0 0
つまり、"1100100" という文字列は $((\iota\iota)(\iota\iota))$ という式に当たるのです。
別の例も見てみましょう。"1010100" はこのような構文木になります。
1
/ \
0 1
/ \
0 1
/ \
0 0
よって、この文字列は $(\iota(\iota(\iota\iota)))$ という式に当たります。
チャーチ・チューリングの提唱
いったん話かわります。
古くから数学の世界にはある一つの問いがありました。それは、そもそも「計算」とはいかなることなのか?という問いです。そこで、この「計算」という行為を厳密に定めようという動きがありました。そして二十世紀ごろ、「計算」という行為のモデル化(計算模型)が立てつづけに考案されました。μ 再帰関数、ラムダ計算、チューリングマシンなどです。この三つは全く別々の人たちにより考案され、しかも一見するとそれぞれが全く違った方法で計算を行うのにもかかわらず、なんとこれらはすべて全く等しい表現能力を持つことが証明されたのです。つまり、これら計算模型のどれか一つで解ける問題は他の計算模型でも解けますし、逆にどれか一つで解けない問題は他のどの計算模型にも解けないことが明らかになったのです。
言い方を変えれば、これらの計算模型を超える能力を持つ計算模型は誰にも思いつけなかったとも言えます。そこで、「『μ 再帰関数で計算できること』を『計算可能である』ことの定義にしちゃっていいんじゃね?」という提案がなされました。これがチャーチ・チューリングの提唱です。
「チャーチ・チューリングの提唱」はあくまでも「提唱」であって「定理」ではないことに注意してください。つまりチャーチ・チューリングの提唱は何者かによって証明された事実ではなく、単なる提案です。
さて Iota の話に戻ってきます。先ほどもお話ししたように $\iota$ はチューリング完全ですから、チャーチ・チューリングの提唱を受け入れるならば Iota は任意のアルゴリズムを記述できることになります。
それに加えて、さきほどお見せしたように任意の Iota プログラムは 0 と 1 のみで表記することが可能です。ここから言えることは、任意のアルゴリズムに対し一意な自然数を割り振ることが可能であるということです。Iota プログラムとして有効な文字列は "0" 一文字のみの文字列か "1" から始まる文字列のみのため、割り振られる自然数がかぶることもありません。
Jot
最後に Iota の姉妹に当たる Jot 言語を軽く紹介します。Jot 言語も Iota 言語と同じく任意のアルゴリズムに自然数を割り振れるのですが、Iota とは違って 0 と 1 からなる任意の文字列(空文字列も含む)が有効なプログラムになります。
0 と 1 からなる文字列 $w$ に対し、$w$ の「翻訳」を $[w]$ と表記することにします。すると Jot 言語はこのように定められます。
\begin{align*}
[] &\rightarrow I \\
[w0] &\rightarrow [w]SK (= \iota [w]) \\
[w1] &\rightarrow S(K[w])
\end{align*}
また、翻訳途中で "1" に遭遇したときにはこのようなショートカットができる場合があります。つまり "1" は直後の項二つをまとめる効果があります。
\begin{align*}
[w1001] &\rightarrow S(K[w100]) \\
&\rightarrow S(K([w10]SK)) \\
&\rightarrow S(K([w\color{red}{1}]\color{blue}{SK}SK)) \\
&\rightarrow S(K([w]\color{blue}{(SK)}SK)) \\
\because S(K([w1]SKSK)) &\rightarrow S(K(S(K[w])SKSK)) \\
&\rightarrow S(K((K[w])K(SK)SK)) \\
&\rightarrow S(K([w](SK)SK)) \\
\end{align*}
この法則を利用すると以下のような公式が成り立ちます。
\begin{align*}
[w11100] &\rightarrow [w111]SKSK \\
&\rightarrow [w](SKSK) \\
&\rightarrow [w]K
\end{align*}
\begin{align*}
[w11111000] &\rightarrow [w11111]SKSKSK \\
&\rightarrow [w](SKSKSK) \\
&\rightarrow [w]S
\end{align*}
先ほども書いたように $S$, $K$ の組み合わせはチューリング完全であり、また上記の法則より $S$, $K$ の組み合わせで表現できる任意の式は必ず 1 から始まる列で表せることになります。したがって、この Jot 言語も Iota 言語と同じく任意のアルゴリズムに自然数を割り振ることができるのです。美しいですね~。
おわりに
計算機科学の世界は本当に摩訶不思議です。一体何を食べてたらこんなこと思いつくんでしょうか・・・
-
ギリシャ文字の一種で、「イオタ」と読みます。 ↩