#include <iostream>
#include <vector>
#include <map>
using namespace std;

int main() {
    string str;
    char ch1 = 0, ch2 = 0;
    while (cin >> str) { // 注意 while 处理多个 case
        map<char, int> mp;
        for (char it : str) {
            mp[it] = 1;          
        }
        if (mp.size() <= 1) {
            cout << "-1" << endl;
            return 0;
        }
        vector<char> vec;
        for (int i = 0; i < 26; ++i) {
            if (mp['a' + i] == 1) {
                vec.push_back('a' + i);
            }
        }
        int i = 0;
        int j = vec.size() - 1;
        for (char it : str) {
            // 全部输出之之后乱输出即可;
            // 放在开始,保证i、j不超出范围
            if (i > j) {
                if (vec[0] != it) {
                    cout << vec[0];
                } else {
                    cout << vec[1];
                }
                continue;
            }

            // 前后两个指针,必定有一个是不同字符
            // 如果一个指针,需要单独处理跳过的情况
            if (vec[i] != it) {
                cout << vec[i];
                ++i;
            } else if (vec[j] != it) {
                cout << vec[j];
                --j;
            } else {
                cout << vec[0];
            }
        }
    }
}

// 64 位输出请用 printf("%lld")

考点一:map,或这26数组,hash。

考点二:输出,如何高效准确的把所有的字母都使用上,我的方法是从前和从后两个指针,交替输出。

这样可以做到,一边相同时可以使用另外一边。

而且不同记录那个是相同的,但是存在的一个问题是,如果从前和从后相遇,且恰好那个元素相同需要单独考虑。