시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 1024 MB53360.000%

문제

Gdy uciekasz przed niedźwiedziem, który chce się z Tobą pobawić i/lub skonsumować Cię na kolację, bardzo ważne jest rozpoznać jego gatunek:

  • jeśli biegniesz i biegniesz, znajdujesz drzewo i wdrapujesz się na nie, a niedźwiedź za Tobą, to jest to niedźwiedź brunatny,
  • jeśli biegniesz i biegniesz, znajdujesz drzewo i wdrapujesz się na nie, a niedźwiedź strząsa Cię z niego, to jest to niedźwiedź grizzly,
  • jeśli biegniesz i biegniesz i nie możesz znaleźć drzewa, to jest to niedźwiedź polarny.

Skupmy się zatem na znalezieniu drzewa. W informatyce drzewo to po prostu zbiór k wierzchołków oraz k − 1 krawędzi, z których każda łączy pewne dwa wierzchołki. Połączenia muszą gwarantować, że z każdego wierzchołka da się osiągnąć każdy inny, idąc wyłącznie po krawędziach. Liczbę krawędzi, które wychodzą z wierzchołka nazywamy stopniem tego wierzchołka.

Dany jest ciąg n liczb a1, a2, . . . , an. Podejrzewasz, że jest to lista stopni wszystkich wierzchołków pewnego drzewa. Niestety, do ciągu zaplątały się pewne przypadkowe liczby, a w dodatku niektóre inne zostały po drodze błędnie przepisane. Usuń niepotrzebne liczby z ciągu i zmień niektóre inne tak, aby faktycznie była to prawidłowa lista stopni.

Formalnie, możesz zmienić kolejność elementów danego ciągu n liczb, usunąć niektóre z nich, po czym zmienić niektóre z pozostałych elementów. Dla uzyskanego ciągu liczb d1, d2, . . . , dk musisz podać drzewo o k ≥ 2 wierzchołkach (ponumerowanych od 1 do k) takie, że di to stopień i-tego wierzchołka. Zarówno liczba usuniętych, jak i zmienionych wierzchołków może być dowolna (także równa 0) – Twoim zadaniem jest znaleźć rozwiązanie o minimalnej liczbie zmienionych wierzchołków.

입력

Pierwszy wiersz wejścia zawiera liczbę całkowitą n (2 ≤ n ≤ 106) – liczbę elementów ciągu. Kolejny wiersz zawiera ciąg n liczb całkowitych a1, a2, . . . , an (1 ≤ ai ≤ n − 1).

출력

W pierwszym wierszu wypisz liczbę zmienionych elementów x (tę wartość masz zminimalizować). W drugim wierszu wypisz rozmiar drzewa k (2 ≤ k ≤ n). W każdym z kolejnych k − 1 wierszy wypisz po dwie liczby ui oraz vi (1 ≤ ui, vi ≤ k), opisujące krawędź między wierzchołkami ui i vi. Wypisane krawędzie muszą tworzyć drzewo.

Jeśli istnieje wiele rozwiązań, wypisz dowolne z nich. Nie musisz minimalizować ani maksymalizować wartości k.

예제 입력 1

6
2 1 5 3 1 1

예제 출력 1

0
5
1 2
2 3
1 4
1 5

Wyjaśnienie do przykładu: W danym ciągu możemy usunąć liczbę 5 oraz zmienić kolejność pozostałych liczb na 3, 2, 1, 1, 1. Na wyjściu widzimy x = 0 (nie modyfikujemy żadnej wartości) w pierwszym wierszu, oraz opis drzewa o k = 5 wierzchołkach w kolejnych wierszach. Wypisane drzewo ma dokładnie takie stopnie jak powyżej.

예제 입력 2

3
1 2 2

예제 출력 2

1
3
1 2
2 3

Wyjaśnienie do przykładu: Tym razem usuwanie elementów nie wystarczy. Możemy zmienić ciąg 1, 2, 2 na 1, 2, 1, co daje x = 1. Jest to optymalne rozwiązanie (najmniejsza możliwa liczba zmian x).