길이가 N인 수열 A1,A2,…,AN이 주어진다. 이 수열에 다음 다섯 종류의 쿼리를 주어진 순서대로 처리하는 프로그램을 작성하시오.
1 l r: l번째 수부터 r번째 수까지에 나오는 서로 다른 값을 오름차순으로 정렬한 집합을 S라고 할 때, 아래 값을 출력한다.
2 x y: Ax를 y로 바꾼다.
3 x: x번째 수를 지운다.
4 z y: z번째 수의 바로 뒤에 y를 넣는다. z=0이면 수열의 맨 앞에 y를 넣는다.
5 l r: l번째 수부터 r번째 수까지에 나오는 서로 다른 수의 개수를 출력한다.
1번 쿼리의 답은 다음과 같다.
(∑1≤i<j<k≤∣S∣SiSjSk)mod(109+7)
수열의 인덱스는 1부터 시작한다. 같은 값이 구간 안에 여러 번 나와도 S에는 한 번만 들어가고, ∣S∣가 3보다 작으면 1번 쿼리의 답은 0이다. 수열의 크기는 항상 1 이상이다.