시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 (추가 시간 없음) 512 MB 1026 208 195 21.812%

문제

NOTE: 이 문제의 내용은 C++11 이후의 표준을 따릅니다.

새내기들을 위해 C++ 스터디를 준비하던 키파는 인터넷에서 신기한 연산자를 발견했다. 바로 화살표 연산자(<--)이다.

프로그램 출력
#include <iostream>

int main(){
  int x = 10;

  while( 0 <-- x ){
    std::cout << x << std::endl;
  }
  return 0;
}
9
8
7
6
5
4
3
2
1

위와 같이 화살표 연산자를 사용하면 연산자 오른쪽에 있는 변수가 연산자 왼쪽의 값을 향해 다가간다! 심지어 이 연산자는 화살표의 길이(-의 개수)를 늘려서 값이 바뀌는 속도를 더 빠르게 할 수도 있다.

프로그램 출력
#include <iostream>

int main(){
  int x = 10;

  while( 0 <---- x ){
    std::cout << x << std::endl;
  }
  return 0;
}
8
6
4
2

화살표의 길이가 2인 첫 번째 코드에서는 수가 9개 출력되었으나, 길이를 4로 늘린 두 번째 코드에서는 수가 4개밖에 출력되지 않았다. 변수가 2배 빠르게 값으로 다가간 것이다!


사실 이 화살표 연산자는 전위 감소 연산자(prefix decrement operator, --x)를 이용한 농담으로, 0 <-- x--x > 0을 화살표처럼 보이도록 눈속임한 것이다. 따라서 첫 번째 코드의 반복문은 아래와 같이 동작한다.

  1. x의 값을 1 감소시킨다.
  2. 만약 x의 값이 0보다 크지 않다면 프로그램을 종료한다.
  3. x의 값을 출력하고 처음으로 돌아간다.

감소 연산자는 아래와 같은 특징이 있다.

  • -가 여러 개 연속되어 있을 때는 반드시 앞에서부터 두 개씩 끊어서 해석된다. 예를 들어 ------x-- - -- -x 또는 - -- - --x 등이 아니라 반드시 -- -- --x로 해석된다.
  • 감소 연산자는 단항 부정 연산자(unary minus operator, -x)가 적용된 식에는 적용할 수 없다. 예를 들어 -----x-- -- -x로 해석되고, 감소 연산자가 -x에 적용되었으므로 컴파일에 실패한다.

두 번째 코드의 0 <---- x-- --x > 0과 같고, 감소 연산자가 두 번 적용되었으므로 x의 값이 한번에 2씩 줄어든다.

위의 코드에서 x의 초기값과 화살표의 길이를 바꿨을 때, 몇 개의 수가 출력될지 예상해 보자.

입력

첫 줄에 변수 x의 초기값을 뜻하는 정수 X와 화살표의 길이를 뜻하는 정수 N(-100 ≤ X ≤ 100, 0 ≤ N ≤ 10)이 주어진다.

출력

첫째 줄에 프로그램의 실행 결과를 출력한다.

  • 만약 프로그램이 정상적으로 종료된다면 프로그램이 출력한 수의 개수를 출력한다.
  • 만약 프로그램이 무한히 많은 수를 출력한다면 INFINITE를 출력한다.
  • 만약 프로그램이 지문에 주어진 조건에 의해 컴파일에 실패할 경우 ERROR를 출력한다. 

예제 입력 1

10 4

예제 출력 1

4

예제 입력 2

-5 5

예제 출력 2

ERROR

예제 입력 3

3 0

예제 출력 3

INFINITE

노트

세 번째 예시는 x의 값이 항상 3이므로 프로그램이 3을 무한히 출력한다.