#P16787. [NWRRC 2014] Expression

    ID: 15997 传统题 10000ms 512MiB 尝试: 3 已通过: 1 难度: 8 上传者: 标签>字符串图论最短路动态规划算法基础构造数学CF2400

[NWRRC 2014] Expression

题目描述

在计算机科学中,正则表达式是一种用于文本搜索和字符串匹配的强大工具。在本题中,我们使用一种简化版的正则表达式。

正则表达式及其匹配规则定义如下:

  • 空字符串 ε\varepsilon 是一个正则表达式,只有空字符串与它匹配。

  • 单个小写字母:对于任意小写英文字母 cc,字符 c 是一个正则表达式,并且只有仅由字符 cc 组成的长度为 11 的字符串与它匹配。

  • 点号. 是一个正则表达式,任意由单个小写英文字母组成的字符串都与它匹配。

  • 或运算:如果 α\alphaβ\beta 是正则表达式,那么

    (αβ)(\alpha\mid\beta)

    也是一个正则表达式。当且仅当字符串 ss 匹配 α\alpha 或匹配 β\beta 时,ss 匹配 (αβ)(\alpha\mid\beta)

  • 连接运算:如果 α\alphaβ\beta 是正则表达式,那么

    (αβ)(\alpha\beta)

    也是一个正则表达式。当且仅当存在两个字符串 x,yx,y,满足

    s=xy,s=xy,

    xx 匹配 α\alphayy 匹配 β\beta 时,字符串 ss 匹配 (αβ)(\alpha\beta)

  • Kleene 星号:如果 α\alpha 是一个正则表达式,那么

    (α)(\alpha^*)

    也是一个正则表达式。

    当且仅当满足下列条件之一时,字符串 ss 匹配 (α)(\alpha^*)

    1. s=εs=\varepsilon,即 ss 是空字符串;
    2. 存在字符串 x,yx,y,使得s=xy,s=xy, 其中 xx 非空且匹配 α\alpha,而 yy 匹配 (α)(\alpha^*)

    换句话说,匹配 (α)(\alpha^*) 的字符串可以表示为

    s=x1x2xk,k0,s=x_1x_2\cdots x_k,\qquad k\ge 0,

    其中每个 xix_i 都匹配 α\alpha。当 k=0k=0 时,ss 为空字符串。

括号可以根据运算优先级省略。在本题中,各运算符的优先级从高到低依次为:

  1. Kleene 星号 *
  2. 连接运算;
  3. 或运算 |

因此,正则表达式

abc*|de

等价于

(ab(c*))|(de)

例如,字符串

abcabcab

匹配正则表达式

a(bc|a)*ab

而字符串

abcbab

不匹配该正则表达式。

你的任务是:找到一个长度最短的字符串 TT,使得:

  1. TT 匹配给定的正则表达式 EE
  2. 给定字符串 SSTT 的一个子串。

输入格式

输入共两行。

第一行包含一个正则表达式 EE

第二行包含一个字符串 SS

满足:

1E,S10,000.1\le |E|,|S|\le 10,000.

字符串 SS 仅由小写英文字母组成。

正则表达式 EE 仅由以下字符组成:

  • 小写英文字母 az
  • 点号 .
  • 左右括号 ()
  • 或运算符 |
  • Kleene 星号 *

输出格式

如果存在满足条件的字符串,则输出一个长度最短的字符串 TT,满足:

  • TT 匹配正则表达式 EE
  • SSTT 的一个子串。

如果不存在这样的字符串,输出:

NO

字符串 TT 只能包含小写英文字母。

输入输出样例 #1

输入 #1

a.*b
bab

输出 #1

abab

输入输出样例 #2

输入 #2

(ab)*
bb

输出 #2

NO