<p>Given a string s represents the serialization of a nested list, implement a parser to deserialize it and return <em>the deserialized</em> <code>NestedInteger</code>.</p>

<p>Each element is either an integer or a list whose elements may also be integers or other lists.</p>

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

<pre>
<strong>Input:</strong> s = &quot;324&quot;
<strong>Output:</strong> 324
<strong>Explanation:</strong> You should return a NestedInteger object which contains a single integer 324.
</pre>

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

<pre>
<strong>Input:</strong> s = &quot;[123,[456,[789]]]&quot;
<strong>Output:</strong> [123,[456,[789]]]
<strong>Explanation:</strong> Return a NestedInteger object containing a nested list with 2 elements:
1. An integer containing value 123.
2. A nested list containing two elements:
    i.  An integer containing value 456.
    ii. A nested list with one element:
         a. An integer containing value 789
</pre>

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

<ul>
	<li><code>1 &lt;= s.length &lt;= 5 * 10<sup>4</sup></code></li>
	<li><code>s</code> consists of digits, square brackets <code>&quot;[]&quot;</code>, negative sign <code>&#39;-&#39;</code>, and commas <code>&#39;,&#39;</code>.</li>
	<li><code>s</code> is the serialization of valid <code>NestedInteger</code>.</li>
	<li>All the values in the input are in the range <code>[-10<sup>6</sup>, 10<sup>6</sup>]</code>.</li>
</ul>

class NestedInteger:
    def __init__(self, value=None):
        if value is None:
            self.is_integer = False
            self.value = []
        elif isinstance(value, int):
            self.is_integer = True
            self.value = value
        else:
            raise ValueError("Invalid value")
    
    def isInteger(self):
        return self.is_integer
    
    def getInteger(self):
        if self.is_integer:
            return self.value
        else:
            raise ValueError("This NestedInteger holds a nested list")
    
    def setInteger(self, value):
        self.is_integer = True
        self.value = value
    
    def add(self, ni):
        if not self.is_integer:
            self.value.append(ni)
        else:
            raise ValueError("This NestedInteger holds an integer")
    
    def getList(self):
        if not self.is_integer:
            return self.value
        else:
            raise ValueError("This NestedInteger holds a single integer")
    
    def __str__(self):
        if self.is_integer:
            return str(self.value)
        else:
            return "[" + ", ".join(str(ni) for ni in self.value) + "]"

class Solution:
    def deserialize(self, s: str) -> NestedInteger:
        def parse(index):
            if s[index[0]] == '[':
                index[0] += 1
                nested_integer = NestedInteger()
                while s[index[0]] != ']':
                    if s[index[0]] == ',':
                        index[0] += 1
                    nested_integer.add(parse(index))
                index[0] += 1
                return nested_integer
            else:
                start = index[0]
                while index[0] < len(s) and s[index[0]] not in ',[]':
                    index[0] += 1
                value = int(s[start:index[0]])
                return NestedInteger(value)
        
        return parse([0])

# Example usage
if __name__ == "__main__":
    sol = Solution()
    
    # Test cases
    s1 = "324"
    result1 = sol.deserialize(s1)
    print("Output for s1:", result1)  # Output: 324
    
    s2 = "[123,[456,[789]]]"
    result2 = sol.deserialize(s2)
    print("Output for s2:", result2)  # Output: [123, [456, [789]]]

18100