#J50002. 括号操作

括号操作

问题描述

在由小写英文字母、() 组成的字符串中,若可以通过以下步骤变为空字符串,则称其为好字符串

  • 首先,删除所有小写英文字母;
  • 然后,只要存在连续的 (),就将其删除。

例如,((a)ba) 删除所有小写英文字母后变为 (()),然后删除第 22 和第 33 个字符的连续 () 后变为 (),最终变为空字符串,因此是好字符串。

给定一个好字符串 SS,第 ii 个字符记为 SiS_i

对于每个小写英文字母 ab\ldotsz,各有一个写有该字母的小球,并准备一个初始为空的箱子。

高桥君按照 i=1,2,,Si = 1, 2, \ldots, |S| 的顺序,依次进行如下操作,除非他中途晕倒:

  • 如果 SiS_i 是小写英文字母,则将写有该字母的小球放入箱子中。若该小球此时已经在箱子中,高桥君会晕倒。
  • 如果 SiS_i(,则什么也不做。
  • 如果 SiS_i),则取 ii 之前最大的整数 jj,使得 SS 的第 jj 到第 ii 个字符组成的子串为好字符串(可以证明这样的 jj 一定存在)。将第 jj 到第 ii 步操作中放入箱子的所有小球从箱子中取出。

请你判断高桥君能否在不晕倒的情况下完成所有操作。

输入格式

第一行输入一个字符串 SS

输出格式

如果高桥君能在不晕倒的情况下完成所有操作,输出 Yes;否则输出 No

样例输入 1

((a)ba)

样例输出 1

Yes

样例输入 2

(a(ba))

样例输出 2

No

样例输入 3

(((())))

样例输出 3

Yes

样例输入 4

abca

样例输出 4

No

说明

样例 1 解释:

  • i=1i = 1 时,为 (,什么也不做;
  • i=2i = 2 时,为 (,什么也不做;
  • i=3i = 3 时,将写有 a 的小球放入箱子;
  • i=4i = 4 时,为 )44 之前使得子串为好字符串的最大 jj22(对应子串 (a)),将第 22 到第 44 步放入的球取出,即取出 a
  • i=5i = 5 时,将写有 b 的小球放入箱子;
  • i=6i = 6 时,将写有 a 的小球放入箱子;
  • i=7i = 7 时,为 ),最大 jj11(对应整个字符串),将第 11 到第 77 步放入的球取出,即取出 ab。 最终顺利完成所有操作,输出 Yes

样例 2 解释:

  • i=1i = 1 时,什么也不做;
  • i=2i = 2 时,将 a 放入箱子;
  • i=3i = 3 时,什么也不做;
  • i=4i = 4 时,将 b 放入箱子;
  • i=5i = 5 时,试图将 a 放入箱子,但此时 a 已经在箱子中,高桥君晕倒,操作终止。输出 No

评测数据规模

对于所有评测数据:

  • 1S3×1051 \leq |S| \leq 3 \times 10^5
  • SS 是好字符串