카드 마술
면접 대비시간 제한2초메모리 제한1024 MB
2n장의 카드 덱에서 i번째 카드를 j번째 위치로 옮기는 데 필요한 최소 셔플 횟수를 구합니다. 불가능하면 -1을 출력합니다.
문제
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을 출력한다.