Expand Sine and Cosine Trigonometry has LOTS of identities. So many that you can expand most functions into sines and cosines of a few values. The task here is to do that in the fewest bytes possible.

Identity list

Well, the ones we're using here.

sin(-x)=-sin(x)
sin(π)=0
cos(-x)=cos(x)
cos(π)=-1
sin(a+b)=sin(a)*cos(b)+sin(b)*cos(a)
cos(a+b)=cos(a)cos(b)-sin(a)sin(b)


For the sake of golfing, I've omitted the identities that can be derived from these. You are free to encode double-angles and such but it may cost you bytes.

Input


You should take in an expression as a string with an arbitrary number of terms consisting of a coefficient and some sine and cosine functions, each with an exponent and an arbitrary number of arguments.
Coefficients will always be nonzero integers.
Each argument will be a coefficient, followed by either a single latin letter or pi.
You can decide whether to take in pi as pi or π. Either way remember that you're scored in bytes, not characters.


Output

Output the same expression, but…


All trig functions are either sin or cos.
All arguments of trig functions are single variables, with no coefficients.
All like terms are combined.
Terms with a coefficient of 0 are removed.
All factors in the same term that are the same function of the same variable are condensed into a single function with an exponent.


Note: Leading + signs are allowed, but not required. a+-b is allowed, and equivalent to a-b. If there are no terms with nonzero coefficients, then output either 0 or an empty string.

Worked Example

We'll start with sin(-3x)+sin^3(x). The obvious first thing to do would be to deal with the sign using the parity identity, leaving -sin(3x). Next I can expand 3x into x+2x, and apply the sine additive identity recursively:

-(sin(x)cos(2x)+cos(x)sin(2x))+sin^3(x)
-(sin(x)cos(2x)+cos(x)(sin(x)cos(x)+sin(x)cos(x)))+sin^3(x)


Next, some distributive property and like terms:

-sin(x)cos(2x)-2cos^2(x)sin(x)+sin^3(x)


Now, I expand the cos(2x) and apply the same reduction:

-sin(x)(cos(x)cos(x)-sin(x)sin(x))-2cos^2(x)sin(x)+sin^3(x)
-sin(x)cos^2(x)+sin^3(x)-2cos^2(x)sin(x)+sin^3(x)
2sin^3(x)-3sin(x)cos^2(x)


And now, it's finished!

Test Cases

In addition to the following, all of the individual identities (above) are test cases. Correct ordering is neither defined nor required.

cos(2x)+3sin^2(x) =&gt; cos^2(x)+2sin^2(x)
sin(-4x) =&gt; 4sin^3(x)cos(x)-4sin(x)cos^3(x)
cos(a+2b-c+3π) =&gt; 2sin(a)sin(b)cos(b)cos(c)-sin(a)sin(c)cos^2(b)+sin(a)sin(c)sin^2(b)-cos(a)cos^2(b)cos(c)+cos(a)sin^2(b)cos(c)-2cos(a)sin(b)cos(b)sin(c)
sin(x+674868986π)+sin(x+883658433π) =&gt; 0 (empty string works too)
sin(x+674868986π)+sin(x+883658434π) =&gt; 2sin(x)


…and may the shortest program in bytes win.
Bracmat, 221 bytes

(P=F v a b.!arg:((sin|cos):?F.?v)&amp;(!v:@&amp;(!F.!v)|!F$!v)|!arg:%?a_%?b&amp;(P$!a)_(P$!b)|!arg)&amp;(f=i a b n u.1+(!arg:e^(?n*((i|-i):?i)*?u+?b)&amp;(!i*(sin.!u)+(cos.!u))^!n*f$(e^!b)|!arg:%?a_%?b&amp;(f$!a)_(f$!b)|!arg)+-1)&amp;(Z=.f$(P$!arg))


Try it online!