부터 까지의 정수로 표시되는 개 마을이 존재한다. 마을 부터 까지 순서대로 이동하면서 단일 품목(한 종류)의 물건에 대해 거래를 하려고 한다.
각 마을에서는 "물건을 개 사기" 또는 "원하는 만큼 개 이상 물건을 팔기"를 선택할 수 있다. 물론, 시작 시에는 물건을 가지고 있지 않다.
마을 에서 한 개의 물건을 사거나 파는 가격은 동일하고 이 가격을 라고 하자. 몇 개의 마을에서는 물건의 가격이 알려져 있지만, 그 외의 마을에서는 가격이 알려져 있지 않다. 그러나, 개의 가격 은 항상 의 순열임은 알려져 있다.
가격을 나타내는 순열 을 으로 표기하자. 여기서, 이미 알려진 가격을 제외하고 (물음표)로 표시하면, 알려지지 않은 가격들에 대하여 모든 가능한 순열을 나타낼 수 있다. 예를 들어, 이미 알려진 가격 와 에 대해, 은 순열 과 을 나타낸다.
물건의 가격을 나타내는 가 포함된 순열이 주어질 때, 가능한 모든 순열 각각에 대해서, 사고 파는 거래를 통해서 얻을 수 있는 최대 이득을 구하고 그 총합을 출력하는 프로그램을 작성하시오.
예를 들어, 이 주어지면, 순열 에서는 마을 , , 에서 각각 물건을 사고 마을 에서 물건을 모두 팔아 의 이득을 얻는다. 또한 순열 에서는 마을 에서 물건을 사고 마을 에서 팔아 의 이득을 볼 수 있다. 따라서, 최대 이득의 총합은 이다.
첫 줄에 마을의 개수를 나타내는 정수 이 주어진다.
그다음 줄에 마을의 물건 가격의 순열을 나타내는 개 정수 이 공백으로 구분되어 차례대로 주어진다. 여기서, 이상 이하의 정수는 이미 알려진 물건 가격을 나타내고, 은 물건 가격이 알려지지 않은 임을 나타낸다. 양수인 의 값은 모두 다르다.
첫 줄에 모든 가능한 순열에 대한 최대 이득의 총합을 으로 나눈 나머지를 출력한다.
4 1 0 3 0
9
4 1 4 3 2
3
입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞혀야 그 종류에 배정된 점수를 받을 수 있다.
종류 1: 5점
종류 2: 6점
종류 3: 5점
인 의 개수가 이하이다.
종류 4: 10점
종류 5: 17점
인 의 개수가 이하이다.
종류 6: 23점
종류 7: 34점
모든 입력 케이스가 주어진다.