An đang tìm kiếm các dãy con biến đổi của một dãy cho trước \(a = (a_1, a_2, …, a_n)\).
Với một dãy số, nếu An bỏ bớt một số phần tử bất kỳ nào của nó (có thể số lượng bỏ bớt là 0) thì thu được một dãy con của nó. Cụ thể hơn, dãy con của dãy \(a\) là dãy bất kỳ (\(a_{i_1}, a_{i_2}, ... , a_{i_k}\)), trong đó \(1 \leq i_1 < i_2 < … < i_k \leq n\).
Một dãy con biến đổi là một dãy con mà cứ hai phần tử đứng cạnh nhau thì khác nhau. Ví dụ, dãy (\(1, 3, 1, 2\)) là dãy con biến đổi của dãy (\(1, 2, 3, 1, 3, 2, 2\)). Giờ An muốn biết có bao nhiêu dãy con biến đổi riêng biệt và khác rỗng của một dãy cho trước. Hai dãy con được xem là riêng biệt nếu vị trí tương ứng với chúng trong dãy \(a\) là khác nhau. Ví dụ, dãy (\(1, 2, 3, 1, 3, 2, 2\)) có 2 dãy con biến đổi riêng biệt cùng có dạng là (\(1, 3, 1, 2\)).
Input
- Dòng đầu tiên chứa 1 số nguyên \(n\) (\(2 \leq n \leq 5 \times 10^5\)) cho biết độ dài của dãy \(a\).
- Dòng thứ hai có \(n\) số nguyên \(a_i\) (\(1 \leq a_i \leq 5 \times 10^5\)).
Output
- Một dòng in một số nguyên duy nhất: số lượng các dãy con biến đổi khác rỗng của dãy đầu vào theo modulo \(\ 10^9 + 7\).
Example
Test 1
Input
4
1 2 1 1
Output
9
Bình luận
Spoiler Alert
Hint 1
Hint 2
Reference AC code | O(n) time | O(n) auxiliary space | Online Solving, STL, DP_count