1class Solution:2def isValid(self, code: str) -> bool:3if code[0] != "<" or code[-1] != ">":4return False5i, n = 0, len(code)6stk = []7while i < n:8if code[i] == "<":9if i != 0 and code[i : i + 9] == "<![CDATA[":10if not stk:11return False12j = i + 913while j + 3 <= n and code[j : j + 3] != "]]>":14j += 115if code[j : j + 3] == "]]>":16i = j + 317else:18return False19else:20start = i21isend = False22i += 123if i >= n:24return False25if code[i] == r"/":26isend = True27i += 128if i >= n:29return False30tag = ""31while i < n and code[i] != ">":32if not code[i].isupper():33return False34tag += code[i]35i += 136if i >= n or len(tag) == 0 or len(tag) > 9:37return False38if isend:39if not stk or stk[-1] != tag:40return False41stk.pop(-1)42else:43if start != 0 and not stk:44return False45stk.append(tag)46i += 147else:48if not stk:49return False50while i < n and code[i] != "<":51i += 152return not stk