# Original solution
def is_unique2(seq):
    seen = []
    unique_list = [x for x in seq if x not in seen and not seen.append(x)]
    return len(seq) == len(unique_list)
while True:
    iCount = 0
    n = input().split()
    if int(n[1]) == 0:
        break
    num = n.pop(0)
    m = int(n[0])
    numStr = list(num)
    while len(numStr) < m:
        numStr.insert(0, "0")
    numSub = [int(numStr[l]) for l in range(m)]
    num0 = "".join([str(k) for k in numSub])
    count = []
    count.append(num0)
    answer = "False"
    while answer:
        numSub.sort()
        #print(numSub)
        Min = "".join([str(j) for j in numSub])
        numSub.reverse()
        #print(numSub)
        Max = "".join([str(i) for i in numSub])
        num1 = int(Max) - int(Min)
        num1 = str(num1)
        xxx = list(num1)
        while len(xxx) < m:
            xxx.insert(0, "0")
        numSub = [int(xxx[g]) for g in range(m)]
        xxxx = "".join([str(h) for h in xxx])
        count.append(str(xxxx))
        answer = is_unique2(count)
        iCount += 1
    print(count.index(count[-1]) ,end=" ")
    print(int(count[-1]) ,end=" ")
    print(str(iCount - count.index(count[-1])))


# Optimized solution
def is_unique2(seq):#後のwhile文でのループ脱出のため
    seen = []
    unique_list = [x for x in seq if x not in seen and not seen.append(x)]
    return len(seq) == len(unique_list)
while True:
    iCount = 0#問のiの部分の値です
    n = input().split()
    if int(n[1]) == 0:#入力の終わりを受けとった時breakする
        break
    a0 = n.pop(0)#a0は問のa0の値を受け取ってます
    L = int(n[0])#Lは問のLの値を受け取ってます
    numStr = list(a0)#a0を一文字ずつ分けてnumStrのリストに入れてます
    while len(numStr) < L:#桁数が足りないとき、一番大きな位に０を入れてます
        numStr.insert(0, "0")
    numInt = [int(numStr[l]) for l in range(L)]#strからintへ型を変えてnumStrをnumIntに入れてます
    A0 = "".join([str(k) for k in numInt])#numIntのリストの一文字ずつの数字を全部繋げてstr型としてA0に入れます(数値的にはa0と同値です)
    count = []#a0,a1,a2,a3...ai(i < 20)の値を入れるcountリストを作ります
    count.append(A0)#そのcountリストの中にまずA0を入れます
    answer = "False"
    while answer:#answerがTrueを受け取ったときこのループを抜けます
        numInt.sort()#numIntのリストの中の数字が昇順に並び替えられます
        Min = "".join([str(j) for j in numInt])#numIntのリストの一文字ずつの数字を全部繋げてstr型としてMinに入れます(数値的には並び替えてできる最小の整数)
        numInt.reverse()#numIntのリストの中の数字が降順に並び替えられます
        Max = "".join([str(i) for i in numInt])#numIntのリストの一文字ずつの数字を全部繋げてstr型としてMaxに入れます(数値的には並び替えてできる最大の整数)
        ax = str(int(Max) - int(Min))#MaxからMinを引いてAx(x=1~20)の値をstr型でaxに入れます
        numStr = list(ax)#axを一文字ずつ分けてnumStrのリストに入れてます(numStrではなく別の関数でも良いが、解りやすい為numStrに入れてます)
        while len(numStr) < L:#桁数が足りないとき、一番大きな位に０を入れてます
            numStr.insert(0, "0")
        numInt = [int(numStr[g]) for g in range(L)]#strからintへ型を変えてnumStrをnumIntに入れてます(whileのループ処理のためnumIntに入れてます)
        Ax = "".join([str(h) for h in numInt])#numIntのリストの一文字ずつの数字を全部繋げてstr型としてAx(x=1~20)に入れます(数値的にはax(x=1~20)と同値です)
        count.append(str(Ax))#a0,a1,a2...aiの値を入れるcountリストの中にAxを入れます
        answer = is_unique2(count)#countリスト内に同じ値が二つあるとき、answerはTrueを受け取り、while文のループから抜け出します
        iCount += 1#今Ax番目の計算を行ったことを示し、answerがTrueを受け取った際は、それがAi番目となる
    print(count.index(count[-1]) ,end=" ")#Ajのjの値を出力(スペース開けて改行しない)
    print(int(count[-1]) ,end=" ")#Aiの値を出力(スペース開けて改行しない)
    print(str(iCount - count.index(count[-1])))#Aiのi-Ajのjの値を出力