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])))

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の値を出力

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])))

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の値を出力

-def is_unique2(seq): +def is_unique2(seq):  # 後のwhile文でのループ脱出のため -    iCount = 0 +    iCount = 0  # 問のiの部分の値です -    if int(n[1]) == 0: +    if int(n[1]) == 0:  # 入力の終わりを受けとった時breakする -    num = n.pop(0) -    m = int(n[0]) -    numStr = list(num) -    while len(numStr) < m: +    a0 = n.pop(0)  # a0は問のa0の値を受け取ってます +    L = int(n[0])  # Lは問のLの値を受け取ってます +    numStr = list(a0)  # a0を一文字ずつ分けてnumStrのリストに入れてます +    while len(numStr) < L:  # 桁数が足りないとき、一番大きな位に０を入れてます -    numSub = [int(numStr[l]) for l in range(m)] -    num0 = "".join([str(k) for k in numSub]) -    count = [] -    count.append(num0) +    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を入れます -    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]))) +    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の値を出力