한 개의 연속 구간을 지우고 각 원소를 최대 한 번 1만큼 바꿔 나머지 배열의 최대공약수가 1보다 커지도록 만드는 최소 비용을 구한다.
정수 NNN개로 이루어진 배열 a1,a2,…,aNa_1, a_2, \dots, a_Na1,a2,…,aN이 주어진다. 이 배열에 다음 두 종류의 연산을 수행할 수 있다.
1번 연산은 전체에서 최대 한 번만 수행할 수 있고, 2번 연산은 각 수마다 최대 한 번만 수행할 수 있다. 1번 연산을 수행할 때는 1≤m<N1 \le m < N1≤m<N이어야 하므로 배열 전체를 삭제할 수는 없다.
1번 연산의 비용은 m×Am \times Am×A이고, 2번 연산의 비용은 한 번에 BBB이다. 연산을 모두 마친 뒤 남은 배열의 최대공약수가 1보다 커지도록 만들려고 한다. 이때 필요한 최소 비용을 구하는 프로그램을 작성하시오.
첫째 줄에 NNN, AAA, BBB가 주어진다. (1≤N≤1 000 0001 \le N \le 1\,000\,0001≤N≤1000000, 1≤A,B≤1091 \le A, B \le 10^91≤A,B≤109)
둘째 줄에 배열에 들어 있는 수 a1,a2,…,aNa_1, a_2, \dots, a_Na1,a2,…,aN이 주어진다. (2≤ai≤1092 \le a_i \le 10^92≤ai≤109)
첫째 줄에 배열의 최대공약수를 1보다 크게 만드는 최소 비용을 출력한다.
첫 번째 예제는 1번 연산으로 세 번째 수를 삭제하면 최소 비용이 된다.
두 번째 예제는 1번 연산으로 두 번째 수부터 세 번째 수까지 삭제하고, 2번 연산으로 다섯 번째 수를 1 줄이면 최소 비용이 된다.