만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

트리 생성기

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

요약
두 식으로 만들 수 있는 트리 중 두 식 모두에서 생성되는 서로 다른 트리의 개수를 998244353으로 나눈 나머지로 구합니다.
난이도

어려움10점 중 9점

유형
트리, 동적 계획법, 해시맵
정답자
아직 제출이 없습니다

문제

입력으로 두 개의 식이 주어진다. 각 식은 트리 하나를 생성하는 절차를 나타낸다. 이 절차에는 무작위성이 있어서 실행할 때마다 서로 다른 트리가 만들어질 수 있다. 두 식 모두에서 생성될 수 있는 트리의 개수를 세시오.

식의 문법은 다음과 같다.

EE ::= ‘1’ | ‘(’ EE EE ‘)’

식으로부터 트리를 생성하는 절차는 다음과 같다.

  • 식 1은 번호 11이 붙은 정점 하나로 이루어진 트리를 생성한다.
  • 두 식 E1E_1, E2E_2에 대해 식 (E1E2E_1E_2)는 다음과 같이 트리를 생성한다.
    • E1E_1로부터 정점이 n1n_1개인 트리 T1T_1을, E2E_2로부터 정점이 n2n_2개인 트리 T2T_2를 생성한다.
    • T2T_2의 모든 정점 번호에 n1n_1을 더한다.
    • T1T_1의 정점 하나와 T2T_2의 정점 하나를 무작위로 고른다. 두 정점을 잇는 간선을 추가하면 번호가 11부터 (n1+n2)(n_1 + n_2)까지인 트리 하나가 된다. 이것이 (E1E2E_1E_2)가 생성한 트리이다.

예를 들어 식 (11)이 생성할 수 있는 트리는 그림 D.1의 가장 왼쪽 트리뿐이다. 식 (1(11))은 나머지 두 트리를 생성할 수 있다.

그림 D.1. 두 식 (11)과 (1(11))로부터 생성되는 트리

같은 트리가 서로 다른 식에서 생성될 수도 있다. 가운데 트리는 ((11)1)에서도 생성될 수 있다.

길이가 같은 두 식이 주어질 때, 두 식 모두에서 생성될 수 있는 트리의 개수를 구하시오. 두 식에서 생성되는 트리의 정점 개수는 항상 같다. 두 트리는 어떤 두 번호 ii, jj에 대해 정점 ii와 jj가 한 트리에서는 간선으로 이어져 있고 다른 트리에서는 그렇지 않으면 서로 다른 트리이다.

입력

입력은 두 줄로 이루어진다. 각 줄에는 식 문자열이 하나씩 주어진다. 두 문자열의 길이는 같으며, 11 이상 7×1057 \times 10^5 이하이다. 두 문자열 모두 위의 문법을 따른다.

출력

두 식 모두에서 생성될 수 있는 트리의 개수를 998 244 353998\,244\,353으로 나눈 나머지를 출력한다.

힌트

입력 예제 1에서 두 식이 생성할 수 있는 트리는 그림 D.2와 같다. 위쪽 여섯 개 트리는 첫 번째 식에서, 아래쪽 네 개 트리는 두 번째 식에서 생성된다. 각 행의 가장 왼쪽 트리만 두 식 모두에서 생성될 수 있다.

그림 D.2. 입력 예제 1의 설명

예제4

  1. 예제 1

    입력
    ((1(11))1)
    ((11)(11))
    
    예상 출력
    1
    
  2. 예제 2

    입력
    (1(11))
    (1(11))
    
    예상 출력
    2
    
  3. 예제 3

    입력
    (((11)(11))((11)1))
    ((1(11))(1(1(11))))
    
    예상 출력
    3
    
  4. 예제 4

    입력
    ((11)(((1(11))1)((11)1)))
    (1(((11)((11)(11)))(11)))
    
    예상 출력
    4