#include <iostream> #include <cstring> #include <algorithm> #include <cmath> #define maxn 100010 using namespace std; typedef struct STR { int a; char c; int pos; } S; bool cmp(S s1, S s2) { if (s1.a != s2.a)return s1.a < s2.a; return s1.pos < s2.pos; } int main() { string s; while (getline(cin, s)) { int pos = 0; S str[maxn]; for (int i = 0; i < s.size(); i++) { if (s[i] >= 'A' && s[i] <= 'Z') { str[pos].c = s[i]; str[pos].a = s[i] - 'A'; str[pos].pos = i; pos++; } else if (s[i] >= 'a' && s[i] <= 'z') { str[pos].c = s[i]; str[pos].a = s[i] - 'a'; str[pos].pos = i; pos++; } } sort(str, str + pos, cmp); pos = 0; for (int i = 0; i < s.size(); i++) { if (s[i] >= 'A' && s[i] <= 'Z') { cout << str[pos++].c; } else if (s[i] >= 'a' && s[i] <= 'z') { cout << str[pos++].c; } else cout << s[i]; } cout << endl; } } // 64 位输出请用 printf("%lld")