메타프로그래밍

아직 제출이 없습니다시간 제한1초메모리 제한1024 MB

문제

유스타스(Justas)는 프로그래밍 대회에 자주 참가합니다. 문제를 푸는 데 시간을 많이 쓰다 보니, 그는 이 과정을 자동화하고 싶어졌습니다. 어떤 문제의 테스트를 주면 그 문제를 푸는 프로그램을 대신 찾아 주는 도구를 원하는 것이지요. 유스타스를 도와주세요.

유스타스는 테스트 목록을 줍니다. 여러분은 그 테스트들을 모두 올바르게 처리하는 프로그램을 찾아야 합니다. 각 테스트는 두 정수로 이루어집니다 — 그 테스트의 입력값과 기대되는 결과입니다. 모든 테스트의 입력값은 서로 다릅니다.

유스타스가 사용하는 프로그래밍 언어는 아주 단순합니다. 프로그램에는 변수가 하나뿐이며, 그 변수에는 크기 제한이 없는 음이 아닌 정수가 저장됩니다. 프로그램이 시작될 때 이 변수에는 테스트의 입력값이 들어갑니다. 프로그램은 다음 명령들의 나열로 이루어집니다.

  • add n — 변수에 $n$을 더합니다 ($0 \le n < 10^9$).
  • multiply n — 변수에 $n$을 곱합니다 ($0 \le n < 10^9$).
  • print — 변수의 값과 줄바꿈 문자를 출력합니다.

예를 들어 다음 프로그램을 생각해 봅시다.

add 5
multiply 8
print

입력값이 $1$이면 이 프로그램은 $48$을 출력하고, 입력값이 $25$이면 $240$을 출력합니다.

유스타스는 자신의 풀이가 시간 제한을 넘기지 않기를 바랍니다. 따라서 주어진 모든 테스트를 올바르게 처리하면서 명령 개수가 가장 적은 프로그램을 찾아야 합니다.

입력

첫째 줄에 정수 $N$ — 테스트의 개수가 주어집니다. 이어지는 $N$개의 줄에는 각각 두 정수 $a_i$와 $b_i$ — $i$번째 테스트의 입력값과 필요한 결과가 주어집니다. 모든 $a_i$는 서로 다릅니다.

출력

모든 테스트를 올바르게 처리하는 가장 짧은 프로그램의 명령 개수 $K$를 한 줄에 출력하세요 (print 명령도 개수에 포함합니다). 그런 프로그램이 존재하지 않으면 $-1$을 출력하세요.

제한

  • $1 \le N \le 50$
  • $0 \le a_i, b_i < 10^9$