#include <iostream>
#include <cstdio>
#include <string>

using namespace std;

/**
 *
 * @param preString 前缀字符
 * @param remainStr 除去前缀字符后剩余的字符
 * @return
 */
void fullArrangement(string preStr, string remainStr) {
    if (remainStr.size() == 1) {
        /*
         * 当余下字符串只有一个字符时,表示前缀字符已经确定下来了
         * 因此,我们直接preString 和 remainString 拼接后输出即可
         */
        cout << preStr + remainStr << endl;
        return;
    } else {
        string nextPreStr = "";
        string nextRemainStr = "";
        for (int i = 0; i < remainStr.size(); ++i) {
            nextPreStr = preStr + remainStr[i];
            /*
             * string.erase(i, 1):
             * 剔除string中,从索引i开始的一个字符(即,剔除索引为i的字符)
             *
             * 注意:此处要先将remainStr赋值给nextRemainStr,然后再删除nextRemainStr的第i个索引的字符
             *
             * 因为,递归结束后会进行回溯,所以不能直接执行remainStr.erase(i, 1);
             * 如果直接删除后,会造成同一层fullArrangement函数调用,中的两次for循环的remainStr不同。
             */
            nextRemainStr = remainStr;
            nextRemainStr.erase(i, 1);
            /*
             * 递归调用
             */
            fullArrangement(nextPreStr, nextRemainStr);
        }
    }
}

/**
 * 全排列--北京大学
 * @return
 */
int main() {
    string sequence;
    while (cin >> sequence) {
        fullArrangement("", sequence);
    }

    return 0;
}