幅優先探索ドリルのサムネイル
(問題 37)SWAP 3 Rust(Beta)編(paizaランク S 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

1,2,3,4,5,6,7,8,9 をそれぞれ 1 文字ずつ含む S に対して f(S) を以下のように定めます。

  • 「隣り合う 2 つの数字を入れ替える」という行為を操作と呼ぶ。123456789 から操作を繰り返して S にするとき、操作回数の最小値


  • 例えば f(123564789) は 123456789 → 123546789 → 123564789 と操作することで 123564789 にすることができ 2 回以下で 123564789 にする方法がないので、2 となります。

    文字列 X が与えられるので、f(X) 回で 123456789 を X にしてください。

    入力される値

    X


    1 行目には 1 つの文字列 X が与えられます。

    入力は合計で 1 行からなり、入力値最終行の末尾に改行が 1 つ入ります。


    入力値最終行の末尾に改行が1つ入ります。
    文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
    期待する出力

    答えを f(X) + 2 行で出力してください。

    1 行目には整数 f(X) を出力してください。

    2 + i (0 ≦ i ≦ f(X)) 行目には 123456789 に i 回操作を行った後の文字列を出力してください。

    以下の条件を全て満たす必要があります。複数答えがある場合にはどれを出力しても正解となります。

  • 1 行目に出力する整数は f(X) である。


  • 2 行目に出力した文字列は 123456789、f(X) + 2 行目に出力した文字列は X である。


  • i (2 ≦ i ≦ f(X) + 1) 行目に出力した文字列から 1 回操作を行うことで、i + 1 行目に出力した文字列にすることが出来る。
  • 条件

    すべてのテストケースにおいて、以下の条件をみたします。

  • X は長さ 9 の1,2,3,4,5,6,7,8,9 をそれぞれ 1 文字ずつ含む文字列
  • 入力例1

    123564789

    出力例1

    2
    123456789
    123546789
    123564789

    入力例2

    123456789

    出力例2

    0
    123456789

    問題一覧へ戻る

    1. paizaトップ
    2. レベルアップ問題集
    3. 幅優先探索ドリル(言語選択)
    4. 問題一覧 Rust(Beta)編
    5. (問題 37)SWAP 3 Rust(Beta)編
    ページの先頭へ戻る