만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

카드 마술

면접 대비

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

요약
2n장의 카드 덱에서 i번째 카드를 j번째 위치로 옮기는 데 필요한 최소 셔플 횟수를 구합니다. 불가능하면 -1을 출력합니다.
난이도

보통10점 중 5점

유형
BFS, 그래프, 구현
정답자
아직 제출이 없습니다

문제

Mahsa는 몇 달째 카드 셔플을 연습해 왔다. 오늘 밤 그녀는 친구들을 집에 초대해 새로 익힌 실력을 보여 주기로 했다. 그녀는 2n장짜리 카드 덱을 들고 덱의 순서를 바꾸지 않은 채 카드 앞면을 친구들에게 보여 준다. 그다음 누군가가 덱에서 두 위치 i와 j를 고른다. Mahsa는 두 종류의 셔플만 사용해 i번째 위치의 카드를 j번째 위치로 옮기겠다고 말한다.

덱의 카드를 ⟨c1, c2, ..., c2n⟩이라 하자. Mahsa는 두 셔플을 원하는 만큼 몇 번이든 적용할 수 있다.

Riffle: 카드를 ⟨c1, ..., cn⟩과 ⟨cn+1, ..., c2n⟩ 두 부분으로 나눈 뒤 ⟨c1, cn+1, c2, cn+2, ..., cn, c2n⟩을 만든다.

Scuffle: ⟨c1, c2, ..., c2n⟩에서 ⟨c2, c1, c4, c3, ..., c2n, c2n-1⟩을 만든다.

Mahsa가 i번째 카드를 j번째 위치로 옮기는 데 필요한 셔플 횟수의 최솟값을 구하라. 나머지는 Mahsa가 알아서 한다.

입력

공백으로 구분된 정수 n, i, j가 한 줄에 주어진다. 1 ⩽ n ⩽ 10^5, 1 ⩽ i, j ⩽ 2n이다.

출력

i번째 카드를 j번째 위치로 옮기는 데 필요한 셔플 횟수의 최솟값을 한 정수로 출력한다. 불가능하면 -1을 출력한다.

예제3

  1. 예제 1

    입력
    4 3 8
    
    예상 출력
    3
    
  2. 예제 2

    입력
    5 4 1
    
    예상 출력
    5
    
  3. 예제 3

    입력
    1 1 1
    
    예상 출력
    0