<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 Solution:
  def deserialize(self, s: str) -> NestedInteger:
    # If s doesn't start with a '[', it must be a single integer, so create a NestedInteger object with that value
    if s[0] != '[':
      return NestedInteger(int(s))

    # Create an empty stack to keep track of NestedInteger objects and sublists as we parse the input string
    stack = []

    # Loop through each character in the string
    for i, c in enumerate(s):
      if c == '[':
        # If we encounter an opening bracket, push a new empty NestedInteger object onto the stack and set the starting index for the next element
        stack.append(NestedInteger())
        start = i + 1
      elif c == ',':
        # If we encounter a comma, check if there was a number between the previous comma or opening bracket and this one.
        # If there was, create a new NestedInteger object with that value and add it to the NestedInteger object on the top of the stack
        if i > start:
          num = int(s[start:i])
          stack[-1].add(NestedInteger(num))
        # Update the starting index for the next element to be parsed
        start = i + 1
      elif c == ']':
        # If we encounter a closing bracket, pop the top NestedInteger object from the stack and check if there was a number between the previous comma or opening bracket and this one.
        # If there was, create a new NestedInteger object with that value and add it to the popped NestedInteger object
        popped = stack.pop()
        if i > start:
          num = int(s[start:i])
          popped.add(NestedInteger(num))
        # If there are still NestedInteger objects on the stack, add the popped NestedInteger to the one on top. Otherwise, return the popped NestedInteger
        if stack:
          stack[-1].add(popped)
        else:
          return popped
        # Update the starting index for the next element to be parsed
        start = i + 1
19000