using
System;
using
System.Collections.Generic;
using
System.Text;
class
Solution
{
public
static
string
removeBrackets(
string
Exp)
{
char
[] s = Exp.ToCharArray();
int
n = Exp.Length;
int
[] ans =
new
int
[n + 1];
Array.Fill(ans, 1);
int
[] lasta =
new
int
[n + 1];
int
[] nxta =
new
int
[n + 1];
int
l = -1;
for
(
int
i = 0; i < n; i++)
{
lasta[i] = l;
if
(s[i] ==
'*'
|| s[i] ==
'+'
|| s[i] ==
'-'
|| s[i] ==
'/'
)
l = s[i];
}
l = -1;
for
(
int
i = n - 1; i >= 0; i--)
{
nxta[i] = l;
if
(s[i] ==
'*'
|| s[i] ==
'+'
|| s[i] ==
'-'
|| s[i] ==
'/'
)
l = s[i];
}
Stack<
int
> st =
new
Stack<
int
>();
int
[] sign =
new
int
[256];
int
[] mp =
new
int
[256];
Array.Fill(sign, -1);
char
[] operand = {
'*'
,
'+'
,
'-'
,
'/'
};
for
(
int
p = 0; p < n; p++)
{
foreach
(
char
x
in
operand)
{
mp[x] = 0;
if
(x == s[p])
sign[x] = p;
}
if
(s[p] ==
'('
)
st.Push(p);
else
if
(s[p] ==
')'
)
{
int
i = st.Pop();
int
j = p;
int
nxt = nxta[j];
int
last = lasta[i];
foreach
(
char
x
in
operand)
{
if
(sign[x] >= i)
mp[x] = 1;
}
int
ok = 0;
if
(i > 0 && j + 1 < n && s[i - 1] ==
'('
&& s[j + 1] ==
')'
)
ok = 1;
if
(mp[
'+'
] == 0 && mp[
'*'
] == 0 && mp[
'-'
] == 0 && mp[
'/'
] == 0)
ok = 1;
if
(last == -1 && nxt == -1)
ok = 1;
if
(last ==
'/'
)
{
}
else
if
(last ==
'-'
&& (mp[
'+'
] == 1 || mp[
'-'
] == 1))
{
}
else
if
(mp[
'-'
] == 0 && mp[
'+'
] == 0)
{
ok = 1;
}
else
{
if
((last == -1 || last ==
'+'
|| last ==
'-'
) && (nxt == -1 || nxt ==
'+'
|| nxt ==
'-'
))
ok = 1;
}
if
(ok == 1)
{
ans[i] = 0;
ans[j] = 0;
}
}
}
StringBuilder res =
new
StringBuilder();
for
(
int
i = 0; i < n; i++)
{
if
(ans[i] > 0)
res.Append(s[i]);
}
return
res.ToString();
}
public
static
void
Main(
string
[] args)
{
string
expression =
"(A*(B+C))"
;
string
result = removeBrackets(expression);
Console.WriteLine(result);
}
}