계산 최적화
시간 제한2초메모리 제한512 MB
1e9+7로 나눈 덧셈과 곱셈 연산 열이 주어질 때, 최대 5e5번의 한 점 갱신을 처리하고 갱신할 때마다 전체 열을 계산한 결과를 출력한다.
문제
현욱은 덧셈과 곱셈을 계산할 수 있는 간단한 계산 장치를 만들었다. 이 계산 장치는 처음에 값 에서 시작해서 ()번의 연산을 순서대로 수행한 결과값을 반환한다. 연산은 아래의 두 종류가 있다.
- + k : 이전 값에 를 더한다()
- * k : 이전 값에 를 곱한다()
연산 결과값이 아주 커질 수 있기 때문에 이 계산 장치는 항상 계산 결과값을 로 나눈 나머지를 저장한다.
현욱은 이 계산 장치에서 일부 연산을 변경한 후 계산 결과가 어떻게 달라지는지를 확인하고 싶다. 현욱은 총 ()번 계산 장치의 연산을 변경할 예정이며, 연산 변경은 다음과 같은 형태로 주어진다.
- i + k : 번째 연산을 이전 값에 를 더하는 연산으로 변경한다().
- i * k : 번째 연산을 이전 값에 를 곱하는 연산으로 변경한다().
모든 변경 사항은 누적된다.
현욱은 연산 변경이 하나 일어날 때마다 다시 처음부터 계산을 하는게 너무 비효율적이라고 생각한다. 현욱을 도와 현욱의 계산 장치를 최적화해서, 연산 변경이 일어날 때 결과를 빠르게 다시 계산하는 프로그램을 작성해보자.
입력
첫줄에 연산의 개수 과 연산을 변경할 횟수 가 공백으로 구분되어 주어진다().
둘째 줄부터 줄에 걸쳐 맨 처음 계산 장치를 구성하는 개의 연산이 순서대로 주어진다.
그 다음부터 줄에 걸쳐 계산 장치의 연산을 어떻게 변경했는지 정보가 순서대로 주어진다.
출력
줄에 걸쳐 연산이 바뀔 때마다 계산 장치의 계산 결과값이 어떻게 바뀌는지 출력한다.