만드는 중입니다

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

수감실 나누기

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

요약
n명의 죄수를 k개의 양의 정수로 나누어 각 값의 XOR이 0이 되도록 합니다. 불가능하면 -1을 출력합니다.
난이도

보통10점 중 4점

유형
수학, 비트 연산, 구현
정답자
아직 제출이 없습니다

문제

어젯밤 스파이더맨이 범죄자 nn명을 잡았다. 교도소는 이미 가득 찼기 때문에 쉴드의 항공모함에 수감하기로 했다. 닉 퓨리가 직접 범죄자들을 수감실에 나누어 배정하기로 했다.

항공모함에는 수감실이 kk개 있다. 닉은 범죄자를 무작위로 배정하고 싶지 않아서, 모든 수감실의 인원수에 대한 배타적 논리합(⊕\oplus)이 0이 되도록 전원을 나누려 한다. 정확히는 1번 수감실에 a1a_1명, 2번 수감실에 a2a_2명, ..., kk번 수감실에 aka_k명을 보내려 하며, 다음 조건을 만족해야 한다.

  • a1+a2+…+ak=na_1+a_2+ \ldots +a_k=n
  • a1⊕a2⊕…⊕ak=0a_1 \oplus a_2 \oplus \ldots \oplus a_k=0

빈 수감실을 두는 것은 의미가 없으므로 모든 aia_i는 0보다 커야 한다.

범죄자들이 이미 탈출 계획을 세우고 있으니 시간이 없다. 항공모함 사령관이 이 문제를 최대한 빨리 풀 수 있도록 도와 달라.

입력

첫 줄에 두 정수 nn, kk (1≤n,k≤100 0001 \le n, k \le 100\,000)가 주어진다. nn은 쉴드 항공모함에 있는 범죄자 수이고, kk는 수감실 수이다.

출력

분할이 가능하면 한 줄에 양의 정수 kk개를 출력한다. ii번째 수는 ii번째 수감실에 보낼 범죄자 수이다.

분할이 불가능하면 -1을 출력한다. 분할 방법이 여러 개라면 그중 아무거나 출력해도 된다.

힌트

배타적 논리합은 다음 진리표를 갖는 논리 연산이다.

  • 0⊕0=00 \oplus 0=0
  • 0⊕1=10 \oplus 1=1
  • 1⊕0=11 \oplus 0=1
  • 1⊕1=01 \oplus 1=0

여러 비트로 이루어진 수의 배타적 논리합은 비트별로 계산한다. 예를 들어 2⊕3=12 \oplus 3=1, 2⊕5=72 \oplus 5=7, 5⊕5=05 \oplus 5=0이다.

자세한 내용은 https://ru.wikipedia.org/wiki/Сложение_по_модулю_2 에서 볼 수 있다.

예제2

  1. 예제 1

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

    입력
    5 3
    
    예상 출력
    -1