```java
#include <bits/stdc++.h>
using namespace std;
#define l(x) (1 << x)
#define ll long long
string mem[20005];
string dfs(ll n) {
string Pow = "(0)";
if (n == 0)
{
//cout << "n = 0!" << endl;
return "0";
}
if (n == 1)
{
return "2" + Pow;
}
if (n == 2)
{
return "2";
}
ll p = 0, t = n;
while (t > 1) {
t >>= 1;//t÷2
p++;
}
if (l(p) == n)
{
if (mem[n] != "")
{
return mem[n];
}
string t = "2(" + dfs(p) + ")";
mem[n] = t;
//cout << t << " " << p << endl;
return t;
}
else
{
if (mem[n] != "")
{
return mem[n];
}
//cout << p << "dd" << endl;
string t = dfs(l(p)) + "+" + dfs(n - l(p));
mem[n] = t;
return t;
}
//cout << "1" << endl;
//return "Error!";
}
int main() {
ll n;
cin >> n;
string ans = dfs(n);
cout << ans << endl;
return 0;
}
```
by 13704085069a @ 2023-07-18 13:36:11