import java.util.Scanner;
public class StringSort {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter a string: ");
String s = input.next();
for (int i = 0; i < s.length(); i++) {
if (!Character.isLetter(s.charAt(i))) {
System.out.print("The string must be letters.");
System.exit(0);
}
}
char[] upOrder = sort(s);
System.out.println(upOrder);
}
public static char[] sort(String s) {
int[] lowerCase = new int[26];
int[] upperCase = new int[26];
char[] letters = new char[s.length()];
countOccusLetters(lowerCase, upperCase, s);
int index = 0;
for (int i = 0; index < s.length() && i < 26; i++) {
if (lowerCase[i] == 0) {
if (upperCase[i] == 0)
continue;
else
index = storeUpperLetter(letters, index, upperCase, i);
} else {
index = storeLowerLetter(letters, index, lowerCase, i);
if (upperCase[i] == 0)
continue;
else
index = storeUpperLetter(letters, index, upperCase, i);
}
}
return letters;
}
public static void countOccusLetters(int[] lowerCase, int[] upperCase, String s) {
for (int i = 0; i < s.length(); i++) {
if (Character.isLowerCase(s.charAt(i)))
lowerCase[s.charAt(i) - 'a']++;
else
upperCase[s.charAt(i) - 'A']++;
}
}
public static int storeLowerLetter(char[] letters, int index, int[] le, int n) {
char ch = digitToLowerChar(n);
for (int i = 0; i < le[n]; i++)
letters[index++] = ch;
return index;
}
public static int storeUpperLetter(char[] letters, int index, int[] le, int n) {
char ch = digitToUpperChar(n);
for (int i = 0; i < le[n]; i++)
letters[index++] = ch;
return index;
}
public static char digitToLowerChar(int index) {
return (char) (index + 'a');
}
public static char digitToUpperChar(int index) {
return (char) (index + 'A');
}
}