만드는 중입니다

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

Heraclosures

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

요약
호출 관계가 사이클 없는 그래프에서 기본 실행 시간을 갱신하며 각 함수의 총 실행 시간 T(i)를 구하고, 질의 번호로 가중합한 값을 10^9+7로 나눈 나머지를 구합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 그래프, 위상 정렬
정답자
아직 제출이 없습니다

문제

프로메테우스는 프로그래머다. 그는 친구 헤라클레스가 만든 프로그래밍 언어 Heraclosures로 큰 프로그램을 작성했다. 이 프로그램에는 NN개의 함수가 있으며, 각 함수는 11부터 NN까지의 서로 다른 정수로 구분된다. 함수는 많은 명령어로 이루어지고, 그중 일부는 다른 함수를 호출하는 call 명령어다.

함수 ii의 call 명령어가 함수 jj를 호출하면, 함수 ii가 계속 실행되기 전에 함수 jj의 전체 코드가 실행된다. 한 함수는 call 명령어를 여러 개 가질 수 있고, 같은 함수를 여러 번 호출할 수 있다. call 명령어가 전혀 없는 함수도 있다. 친구 시시포스의 조언에 따라 프로메테우스는 함수 호출에 순환이 없도록 만들었으므로, 호출이 무한히 반복되는 일은 없다.

함수 ii에는 기본 실행 시간 BiB_i가 있다. 이는 ii가 호출하는 함수의 시간을 제외한 실행 시간이다. 실행 시간은 프로세서 사이클 단위로 재며, BiB_i는 항상 0 이상의 정수다. 함수 ii의 전체 실행 시간 T(i)T(i)는 기본 실행 시간에 ii가 직접 호출하는 모든 함수의 전체 시간을 더한 값이다.

T(i)=Bi+∑j∈C(i)T(j)T(i) = B_i + \sum_{j \in C(i)} T(j)

여기서 C(i)C(i)는 ii가 직접 호출하는 함수들의 다중집합이다. ii가 jj를 여러 번 호출하면 T(j)T(j)가 그 횟수만큼 합에 나타난다. ii에 call 명령어가 없으면 C(i)C(i)는 비어 있고 T(i)=BiT(i) = B_i다.

갱신 이벤트는 BiB_i를 값 VV로 바꾼다. 갱신은 기본 실행 시간만 바꾸며, 다중집합 C(i)C(i)는 그대로 유지된다. 질의 이벤트는 이벤트 목록에서 그보다 앞에 있는 모든 갱신을 반영하여, 함수 ii의 현재 전체 실행 시간 T(i)T(i)를 구한다.

프로메테우스는 질의마다 결과를 보고 싶어 하지 않고, 하나의 요약값을 원한다. 질의가 qq개 있고 이벤트 순서대로 11부터 qq까지 번호가 매겨져 있을 때, 요약값은 다음과 같다.

(∑k=1qk⋅T(ik)) mod (109+7)\left( \sum_{k=1}^{q} k \cdot T(i_k) \right) \bmod (10^9+7)

여기서 T(ik)T(i_k)는 kk번째 질의에서 지정한 함수의 전체 실행 시간이며, 그 질의 이전의 모든 갱신을 반영한다.

입력

첫 줄에 함수의 개수 NN (1≤N≤80001 \le N \le 8000)이 주어진다.

다음 줄에는 NN개의 정수 B1,B2,…,BNB_1, B_2, \dots, B_N (0≤Bi≤1090 \le B_i \le 10^9)이 주어지며, 각 함수의 기본 실행 시간을 나타낸다.

다음 줄에는 전체 함수에 있는 call 명령어의 개수 MM (1≤M≤80001 \le M \le 8000)이 주어진다. 이어지는 MM개의 줄에는 두 정수 FF와 GG (1≤F,G≤N1 \le F, G \le N, F≠GF \ne G)가 주어지며, 함수 FF에 함수 GG를 호출하는 call 명령어가 있음을 뜻한다.

다음 줄에는 이벤트의 개수 EE (1≤E≤1061 \le E \le 10^6)가 주어진다. 이어지는 EE개의 줄은 각각 이벤트다. 대문자 U 뒤에 정수 II (1≤I≤N1 \le I \le N)와 VV (0≤V≤1090 \le V \le 10^9)가 오면 BIB_I를 VV로 설정하는 갱신이다. 대문자 Q 뒤에 정수 JJ (1≤J≤N1 \le J \le N)가 오면 T(J)T(J)를 구하는 질의다.

입력에는 함수 호출 순환이 없으며, 질의는 최소 하나 주어진다.

출력

모든 질의의 요약값을 109+710^9+7로 나눈 나머지를 한 줄에 정수로 출력한다.

예제2

  1. 예제 1

    입력
    3
    10 20 100
    3
    1 2
    2 3
    1 3
    3
    Q 1
    Q 2
    Q 3
    
    예상 출력
    770
    
  2. 예제 2

    입력
    2
    42 10
    2
    2 1
    2 1
    5
    Q 2
    Q 1
    U 2 0
    Q 1
    Q 2
    
    예상 출력
    640