Алмастыруларды біріктіру


Шешімді жөнелту

Ұпайлар: 1
Уақыт шектеуі: 1.0s
Жад шектеуі: 256M

Author:
Problem types
Рұқсат етілген тілдер
Assembly, Awk, Brain****, C, C++, Go, Java, Kotlin, Pascal, Perl, PHP, Python, Sed, Text

Берілген массив \(a\), ол мүмкін келесі түрде алынған: \(1\)-ден \(k_1\)-ге дейінгі сандардың алмастыруын алып, оң жағына \(1\)-ден \(k_2\)-ге дейінгі алмастыруды, содан кейін \(1\)-ден \(k_3\)-ке дейінгі алмастыруды және т.с.с. қосып, \(1\)-ден \(k_s\)-ке дейінгі алмастыруды қосқанша. Басқаша айтқанда, мұндай массив \(s\) тізбектелген блоктардың конкатенациясы болып табылады, мұнда әр блок — кейбір бүтін \(k_i \ge 1\) үшін \([1..k_i]\) алмастырылуы.

Берілген массив \(a\) бойынша блоктардың ұзындықтарының кез келген сәйкес келетін тізбегін \(k_1, k_2, \dots, k_s\) қалпына келтіру қажет. Егер бұл мүмкін болмаса, \(-1\) шығарыңыз.

Егер бірнеше дұрыс жауаптар болса, олардың кез келгенін шығарыңыз.

Енгізу

Бірінші жолда бір бүтін сан \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — тестілер саны.

Келесіде тестілердің сипаттамалары. Әр тест үшін:

  • бірінші жолда бір бүтін сан \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — массивтің ұзындығы;

  • екінші жолда \(m\) бүтін сан \(a_1, a_2, \dots, a_m\) (\(1 \le a_i \le m\)) бар.

Барлық тестілер бойынша \(m\) сандарының қосындысы \(2 \cdot 10^5\)-тен аспайтынына кепілдік беріледі.

Шығару

Әр тест үшін шығарыңыз:

  • егер бөліну мүмкін болса — бірінші жолда бүтін сан \(s\) (блоктар саны), екінші жолда \(s\) бүтін сан \(k_1, k_2, \dots, k_s\) (блоктардың ұзындықтары солдан оңға);

  • әйтпесе, бір ғана жол \(-1\) шығарыңыз.

Мысалдар

Енгізу 1
3
8
2 1 1 2 3 3 1 2
5
1 2 1 4 3
4
2 1 1 3
Жауап 1
3
2 3 3 
2
1 4 
-1