Problem:
対称３進数

1 グラム、3 グラム、9 グラム、27 グラムのおもりが１つずつあれば、天びんを使って 1 グラムから 40グラムまで 1 グラム刻みで量れることが知られています。たとえば、天びんの一方の皿に重さを量りたいものと 3 グラムのおもりを載せ、もう一方の皿に 27 グラムと 1 グラムのおもりを載せて釣り合えば、量りたいものの重さは 27-3+1=25 グラムだとわかります。 さらに、1(=30)グラム、31 グラム、... 、3n-1 グラム、3n グラムまでのおもりが１つずつあれば、天びんを使って(3n+1-1)/2グラムまで量れることが知られています。また、天びんが釣り合うようなおもりの置き方は一通りしかないことも知られています。

量りたいものとおもりを天びんに置いて、釣り合うようなおもりの置き方を文字列で表すことができます。3i グラムのおもりを量りたいものと同じ皿に載せたときは「-」、もう一方の皿に載せたときは「+」、どちらにも載せなかったときは「0」を文字列の右端からi番目に書きます（右端を０番目と数えます）。たとえば、先ほどの 25 グラムの例は +0-+ と表わせます。

それでは、量りたいものの重さが与えられたとき、天びんが釣り合うようなおもりの置き方を表す文字列を出力するプログラムを作成してください。ただし、３のべき乗グラムのおもりは、どのような重さのものでも必ず１つあるものとします。

（補足： 対称３進数について）

量りたいものの重さがwのとき、おもりの置き方を表す文字列はwの対称３進数になっています。対称３進数とは、３のべき乗の数で位取りを行い、各位に数 1、0、-1 を表す文字を書くことで表した数のことです。上の文字列では、文字「+」、「0」、「-」がそれぞれ数 1、0、-1 に対応します。たとえば、25 グラムのものを量るときのおもりの置き方が +0-+ である対称３進数が表す数は、1 × 33 + 0 × 32 - 1× 31 + 1 × 30 = 25 となります。

入力

入力は以下の形式で与えられる。

w

w (1 ≤ w ≤ 100000) は量りたいものの重さを表す整数である。

出力

おもりの置き方を表す文字列を出力する。ただし文字列の左端を 0 にしてはならない。

入出力例

入力例１

25

出力例１

+0-+

入力例２

2

出力例２

+-

入力例３

5

出力例３

+--

Solution in Kotlin (judge verdict: Time Limit Exceeded)


fun main(args:Array<String>):Unit {
        var num = readLine()!!.trim().toInt()
        var weight = maxWeight(num)
        while (weight != 0){
            print(
                    when{
                        weight / 3 <= num -> {
                            num -= weight
                            '+'
                        }
                        -weight / 3 > num -> {
                            num += weight
                            '-'
                        }
                        else -> '0'
                    }
            )
            weight /= 3
        }
    println()
}
fun maxWeight(num:Int):Int {
    var n = num * 2
    var res = 1
    while (n != 1){
        n /= 3
        res *= 3
    }
    return res
}