<p>Solve a given equation and return the value of <code>&#39;x&#39;</code> in the form of a string <code>&quot;x=#value&quot;</code>. The equation contains only <code>&#39;+&#39;</code>, <code>&#39;-&#39;</code> operation, the variable <code>&#39;x&#39;</code> and its coefficient. You should return <code>&quot;No solution&quot;</code> if there is no solution for the equation, or <code>&quot;Infinite solutions&quot;</code> if there are infinite solutions for the equation.</p>

<p>If there is exactly one solution for the equation, we ensure that the value of <code>&#39;x&#39;</code> is an integer.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> equation = &quot;x+5-3+x=6+x-2&quot;
<strong>Output:</strong> &quot;x=2&quot;
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> equation = &quot;x=x&quot;
<strong>Output:</strong> &quot;Infinite solutions&quot;
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> equation = &quot;2x=x&quot;
<strong>Output:</strong> &quot;x=0&quot;
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>3 &lt;= equation.length &lt;= 1000</code></li>
	<li><code>equation</code> has exactly one <code>&#39;=&#39;</code>.</li>
	<li><code>equation</code> consists of integers with an absolute value in the range <code>[0, 100]</code> without any leading zeros, and the variable <code>&#39;x&#39;</code>.</li>
	<li>The input is generated that if there is a single solution, it will be an integer.</li>
</ul>

class Solution:
    def solveEquation(self, equation: str) -> str:
        def get_coef(s):
            x_coef = c_coef = 0
            i = 0
            while i < len(s):
                j = i
                sign = 1
                is_x = False
                val = 0
                if s[j] in ('+', '-'):
                    if s[j] == '-':
                        sign = -1
                    j += 1
                    i = j
                while j < len(s) and s[j] not in ('+', '-'):
                    if s[j] == 'x':
                        is_x = True
                        if i == j:  # cannot be val == 0, e.g, 0x = 0
                            val = 1
                    else:
                        val = 10*val + ord(s[j]) - ord('0')
                    j += 1
                i = j
                if is_x:
                    x_coef += val * sign
                else:
                    c_coef += val * sign
            return x_coef, c_coef
        ls, rs = equation.split('=')
        xs0, cs0 = get_coef(ls)
        xs1, cs1 = get_coef(rs)
        xs = xs0 - xs1
        cs = cs1 - cs0
        if xs == 0 and cs == 0:
            return 'Infinite solutions'
        if xs == 0 and cs != 0:
            return 'No solution'
        return f'x={cs // xs}'
16400