ASM
시간 제한1초메모리 제한1024 MB
변수 X에 대한 add, multiply, print 명령으로 이루어진 프로그램이 모든 테스트의 출력을 정확히 만들어 내도록 하는 최소 명령 수를 구한다.
문제
Justas는 프로그래밍 올림피아드에 자주 참가한다. 문제를 푸는 데 시간이 오래 걸리기 때문에, 그는 문제의 테스트를 입력하면 해답을 자동으로 찾아 주는 프로그램을 원한다. 그를 도와주자!
테스트 목록이 주어지면, 그 모든 테스트를 올바르게 처리하는 하나의 프로그램을 찾아야 한다. 각 테스트는 두 수, 즉 초기 수와 결과로 이루어진다. 각 테스트의 초기 수는 서로 다르다.
프로그램은 매우 단순한 언어로 작성된다. 이 언어에는 변수 하나만 있으며, 는 크기에 제한이 없는 음이 아닌 정수를 담는다 (). 프로그램이 시작되면 테스트의 초기 수가 에 저장된다. 프로그램은 다음 명령들의 목록이다.
add n— 에 을 더한다 ()multiply n— 에 을 곱한다 ()print— 의 현재 값을 출력한다. 앞에 을 붙이지 않은 십진수로 출력하며(단, 값이 이면0을 출력한다), 구분자나 줄바꿈 없이 출력한다.
한 테스트에 대한 프로그램의 출력은 모든 print 명령이 출력한 내용을 이어 붙인 것이다. 예를 들어 다음 프로그램은
multiply 2
print
add 5
print
초기 수가 이면 27을, 초기 수가 이면 1217을 출력한다.
모든 테스트에 대해 올바른 출력을 내는 프로그램들 중에서, Justas는 명령의 개수가 가장 적은 것을 원한다. 그 최소 명령 개수를 구하여라.
입력
첫째 줄에 테스트의 개수 이 주어진다. 다음 개의 줄에는 각각 두 정수 와 가 주어진다. 는 번째 테스트의 초기 수이고, 는 만들어 내야 하는 출력이다. 모든 는 서로 다르다.
출력
모든 테스트에 대해 올바른 출력을 내는 프로그램의 최소 명령 개수를 정수 하나로 출력한다. 그러한 프로그램이 존재하지 않으면 -1을 출력한다.