fun readInt(): Int {
    val N: Int = readLine()!!.toInt()
    return N
}

fun readString(): String {
    val N: String = readLine()!!
    return N
}

fun getSeqList(): List<Int>{
    return (1..5).toList()
}

fun solveB_bk(): Long{
    val N: Int = readLine()!!.toInt()
    var An: Array<Int?> = arrayOfNulls(N)
    var ans: Long = 0
    for (i in An.indices) {
        val num: Int = (i + 1)
        if (num%3 == 0 || num%5 == 0 ){
            continue
        }
        ans += num
    }
    return ans
}

fun solveA(): String{
    val N: Int = readLine()!!.toInt()
    for (i1 in (1..9).toList()){
        for (i2 in (1..9).toList()){
            if (N == i1*i2){
                return "Yes"
            }
        }
    }
    return "No"
}

fun solveB(): String{
    val S: String = readLine()!!
    for (i in (0..(S.length-1)).toList()){
        val num: Int = i + 1
        val subS: String = S.substring(i,i+1)
        if (subS == "U" || subS == "D"){
            continue
        }
        if (num%2 == 1){
            if(subS == "R"){
                continue
            }
        } else {
            if(subS == "L"){
                continue
            }
        }
        return "No"
    }
    return "Yes"
}

fun solveC(): String{
    val S: String = readLine()!!
    var startIdx: Int = 0
    var splitList: MutableList<String> = mutableListOf()
    for (i in (1..(S.length-1))){
        val startS = S.substring(startIdx,startIdx+1)
        val subS: String = S.substring(i,i+1)
        if (subS == startS) {
            continue
        } else {
            val addS: String = S.substring(startIdx,i)
            splitList.add(convertArchiveString(addS))
            startIdx = i
        }
    }
    val addS: String = S.substring(startIdx,S.length)
    splitList.add(convertArchiveString(addS))
    return splitList.joinToString(separator = "")
}

fun convertArchiveString(S: String): String{
    val lengthS = S.length
    return S.substring(0,1) + lengthS.toString()
}

fun solveD(){
    val (n,k) = readLine()!!.split(' ').map(String::toInt)
    val combibation = nCkMod(3000)
    val blue: Int = k
    val red: Int = n - k
    var mod = Math.pow(10.0,9.0).toLong() + 7
    for (i in 1..k){
        println(combibation[red+1][i] * combibation[blue-1][i-1] % mod)
    }
}

fun nCkMod(MAX: Int): Array<LongArray>{
    var mod = Math.pow(10.0,9.0).toLong() + 7
    val combination = Array<LongArray>(MAX,{ LongArray(MAX)})
    combination[0][0] = 1
    for (i1 in (1..(MAX-1))){
        for (i2 in (0..i1)){
            val left = if (i2 -1 >= 0) combination[i1-1][i2-1] else 0
            val right = combination[i1-1][i2]
            combination[i1][i2] = (left + right) % mod
        }
    }
    return combination
}

fun main(args: Array<String>) {
    //Practice
    //println(getSeqList())
    // 20200421 A problem
    /*
    if (readString().contains('7')){
        println("Yes")
    } else {
        println("No")
    }
    */

    // 20200421 B problem
    //println(solveB_bk())

    // masui#4 A problem
    //println(solveA())

    // masui#4 B problem
    //println(solveB())

    // masui#4 C problem
    //println(solveC())

    // masui#4 D problem
    //solveD()
    solveD()
}


Measured memory_bytes: 116860