서로소 정규 표현식

시간 제한2초메모리 제한128 MB

요약
두 정규 표현식이 주어질 때 둘 다에 매칭되는 비어 있지 않은 문자열이 있는지 판정하고, 있으면 가장 짧고 사전순으로 가장 앞선 문자열을 출력한다.
난이도

어려움10점 중 8점

유형
동적 계획법, BFS, 문자열, 시뮬레이션
정답자
아직 제출이 없습니다

문제

마크(Mark)는 포보스(Phobos)와 데이모스(Deimos)의 주민을 위한 새로운 소셜 네트워크 페이스팜(Facepalm)을 만들고 있다. 그는 각 계정에 대해 로그인 시 기본으로 추천할 고향 소행성을 제시하려 하는데, 사용자의 고향 소행성은 그 사람의 성(last name)을 분석해 알아낼 수 있다는 사실을 발견했다.

모든 성은 영어 소문자로 이루어진, 비어 있지 않은 단어이다. 포보스 사용자의 성은 정규 표현식 PP와 일치하고, 데이모스 사용자의 성은 정규 표현식 DD와 일치한다.

문제는 어떤 성이 두 표현식 모두와 일치할 수 있다는 점이다. 두 표현식이 서로소라는 것은, 두 표현식 모두와 일치하는 비어 있지 않은 문자열 ss가 존재하지 않음을 뜻한다. 마크는 PP와 DD가 서로소라고 믿지만, 이를 확인하려면 당신의 도움이 필요하다.

두 정규 표현식 PP와 DD가 주어진다. 두 표현식이 서로소인지 판별하고, 서로소가 아니라면 두 표현식 모두와 일치하는 가장 짧은, 비어 있지 않은 문자열을 구하라. 그러한 문자열이 여러 개라면 사전순으로 가장 앞서는 것을 출력한다.

입력

입력은 두 줄로 이루어진다. 첫 번째 줄에는 정규 표현식 PP가, 두 번째 줄에는 정규 표현식 DD가 주어진다. 각 표현식의 길이는 11 이상 100100 이하이다.

출력

두 표현식이 서로소이면 첫 번째 줄에 Correct를 출력한다.

서로소가 아니면 첫 번째 줄에 Wrong을 출력하고, 두 번째 줄에 두 표현식 모두와 일치하는 가장 짧은, 비어 있지 않은 문자열을 출력한다. 그러한 문자열이 여러 개라면 사전순으로 가장 앞서는 것을 출력한다.

정의

정규 표현식과 그에 일치하는 문자열은 다음과 같이 정의된다.

  • 하나의 소문자 cc는 정규 표현식이며, 오직 한 글자 cc로 이루어진 문자열과만 일치한다.
  • 선택(alternation): PP와 QQ가 정규 표현식이면 (P∣Q)(P \mid Q)도 정규 표현식이며, 문자열 α\alpha는 α\alpha가 PP 또는 QQ와 일치하면 이 표현식과 일치한다.
  • 이어 붙이기(concatenation): PP와 QQ가 정규 표현식이면 (PQ)(PQ)도 정규 표현식이며, 문자열 α\alpha는 α=βγ\alpha = \beta\gamma로 나누어 β\beta가 PP와, γ\gamma가 QQ와 일치하면 이 표현식과 일치한다.
  • 클레이니 스타(Kleene star): PP가 정규 표현식이면 (P∗)(P^{*})도 정규 표현식이며, 문자열 α\alpha는 α\alpha를 PP와 각각 일치하는 0개 이상의 조각 α1α2…αk\alpha_1\alpha_2\dots\alpha_k로 나눌 수 있으면 이 표현식과 일치한다. 빈 문자열은 항상 클레이니 스타와 일치한다.

입력에서 표현식은 그룹을 묶기 위한 괄호와 함께 일반적인 연산자 우선순위로 표기된다. 클레이니 스타 *가 가장 강하게 결합하고, 그다음이 이어 붙이기, 마지막이 선택 |이다. 예를 들어 a(ab)*b는 글자 a 다음에 ab가 0번 이상 반복되고 그 뒤에 글자 b가 오는 것을 뜻한다.

예제4

  1. 예제 1

    입력
    a(ab)*b
    a(a|b)*ab
    
    예상 출력
    Correct
    
  2. 예제 2

    입력
    a(ab)*a
    a(a|b)*ba
    
    예상 출력
    Wrong
    aaba
    
  3. 예제 3

    입력
    a
    a
    
    예상 출력
    Wrong
    a
    
  4. 예제 4

    입력
    a
    b
    
    예상 출력
    Correct