아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

ASM

시간 제한1초메모리 제한1024 MB

요약
변수 X에 대한 add, multiply, print 명령으로 이루어진 프로그램이 모든 테스트의 출력을 정확히 만들어 내도록 하는 최소 명령 수를 구한다.
난이도

어려움10점 중 8점

유형
완전 탐색, 동적 계획법, 문자열, 수학
정답자
아직 제출이 없습니다

문제

Justas는 프로그래밍 올림피아드에 자주 참가한다. 문제를 푸는 데 시간이 오래 걸리기 때문에, 그는 문제의 테스트를 입력하면 해답을 자동으로 찾아 주는 프로그램을 원한다. 그를 도와주자!

테스트 목록이 주어지면, 그 모든 테스트를 올바르게 처리하는 하나의 프로그램을 찾아야 한다. 각 테스트는 두 수, 즉 초기 수와 결과로 이루어진다. 각 테스트의 초기 수는 서로 다르다.

프로그램은 매우 단순한 언어로 작성된다. 이 언어에는 변수 XX 하나만 있으며, XX는 크기에 제한이 없는 음이 아닌 정수를 담는다 (X≥0X \ge 0). 프로그램이 시작되면 테스트의 초기 수가 XX에 저장된다. 프로그램은 다음 명령들의 목록이다.

  • add n — XX에 nn을 더한다 (0≤n<10180 \le n < 10^{18})
  • multiply n — XX에 nn을 곱한다 (0≤n<10180 \le n < 10^{18})
  • print — XX의 현재 값을 출력한다. 앞에 00을 붙이지 않은 십진수로 출력하며(단, 값이 00이면 0을 출력한다), 구분자나 줄바꿈 없이 출력한다.

한 테스트에 대한 프로그램의 출력은 모든 print 명령이 출력한 내용을 이어 붙인 것이다. 예를 들어 다음 프로그램은

multiply 2
print
add 5
print

초기 수가 11이면 27을, 초기 수가 66이면 1217을 출력한다.

모든 테스트에 대해 올바른 출력을 내는 프로그램들 중에서, Justas는 명령의 개수가 가장 적은 것을 원한다. 그 최소 명령 개수를 구하여라.

입력

첫째 줄에 테스트의 개수 NN이 주어진다. 다음 NN개의 줄에는 각각 두 정수 aia_i와 bib_i가 주어진다. aia_i는 ii번째 테스트의 초기 수이고, bib_i는 만들어 내야 하는 출력이다. 모든 aia_i는 서로 다르다.

출력

모든 테스트에 대해 올바른 출력을 내는 프로그램의 최소 명령 개수를 정수 하나로 출력한다. 그러한 프로그램이 존재하지 않으면 -1을 출력한다.

제한

  • 1≤N≤501 \le N \le 50
  • 0≤ai,bi<10180 \le a_i, b_i < 10^{18}

예제3

  1. 예제 1

    입력
    3
    2 12
    3 18
    5 30
    
    예상 출력
    2
    
  2. 예제 2

    입력
    2
    2 47
    43 8689
    
    예상 출력
    4
    
  3. 예제 3

    입력
    2
    1 3
    2 2
    
    예상 출력
    -1