성간 항해
시간 제한1초메모리 제한1024 MB
행성은 번호 순서대로 방문하며 각 행성에서 한 종류의 연료만 넣을 수 있고, 행성 i에서 연료를 채우면 같은 연료가 다시 나오는 다음 행성까지 갈 수 있다. 행성 N에 도달하는 최소 연료 보충 횟수와 그 행성 번호를 구한다.
문제
탐사대가 신세대 우주선을 타고 항해를 떠나려 한다. 행성계의 개 행성을 지구에서 승리 행성까지 차례로 방문할 계획이다. 행성들은 방문 순서대로 부터 까지 번호가 매겨져 있으며, 지구는 번, 승리 행성은 번이다.
행성 사이를 이동할 때 우주선은 행성계에 존재하는 어떤 종류의 연료든 사용할 수 있다. 탐사를 시작하기 전 우주선은 지구에 있고 연료 탱크는 비어 있다. 존재하는 연료 종류는 정수로 번호가 매겨져 있으며, 번 행성에서는 번 연료만 넣을 수 있다. 번 행성을 방문했을 때 탱크에 있던 연료를 모두 비우고 번 연료로 가득 채워 넣을 수 있다.
각 행성의 주유소는 탱크에 같은 종류의 연료를 사용하는 다음 행성까지 이동하는 데 필요한 만큼의 연료만 정확히 넣도록 되어 있다. 만약 그 뒤에 같은 종류의 연료가 나타나지 않으면 그 행성에서는 연료를 넣을 수 없다. 즉, 번 행성에서 연료를 넣으면 번부터 번 행성까지 방문할 수 있을 만큼의 연료가 채워지며, 여기서 는 이고 인 가장 작은 행성 번호이다. 번 행성보다 더 멀리 탐사를 계속하려면 이 행성들 중 하나에서 다시 연료를 넣어야 한다.
행성별 연료 종류가 주어졌을 때 탐사에 필요한 최소 연료 보급 횟수를 구하는 프로그램을 작성해야 한다.
입력
첫째 줄에 행성의 수 이 주어진다 ().
둘째 줄에 행성별 연료 종류를 나타내는 개의 정수 이 주어진다 ().
출력
첫째 줄에 해야 하는 연료 보급의 최소 횟수 를 출력한다.
둘째 줄에 연료를 넣어야 하는 행성의 번호 개를 공백으로 구분하여 출력한다. 행성 번호는 연료를 넣는 시각 순서대로 출력해야 한다.
연료 보급 횟수가 최소인 해가 여러 개라면 그중 아무거나 출력한다. 해가 존재하지 않으면 을 출력한다.