#include <iostream>
#include <algorithm>
#include <string>
#include <cctype>
#include <vector>
#include <iterator>
using namespace std;
int main() {
std::vector <std::string> StringVect = { "BB", "-", "", "0", "+", "aA", "12", "b", "AA", "&", "[", "**", "1" };
std::sort(StringVect.begin(), StringVect.end(), []
(const std::string& s1, const std::string& s2)
{
if (s1.empty() || s2.empty())
return s1 < s2;
bool ac[] = { isalpha(s1[0]), isalpha(s2[0]),
isdigit(s1[0]), isdigit(s2[0]),
!isalnum(s1[0]), !isalnum(s2[0]) };
// If both strings start with the same type, then just return the
// lesser one
if ((ac[0] && ac[1]) || (ac[2] && ac[3]) || (ac[4] && ac[5]))
return s1 < s2;
return (ac[0] || ac[5]);
});
copy(StringVect.begin(), StringVect.end(), ostream_iterator<string>(cout, "\n"));
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y2N0eXBlPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aXRlcmF0b3I+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKSB7CiAgICBzdGQ6OnZlY3RvciA8c3RkOjpzdHJpbmc+IFN0cmluZ1ZlY3QgPSB7ICJCQiIsICItIiwgIiIsICIwIiwgIisiLCAiYUEiLCAiMTIiLCAiYiIsICJBQSIsICImIiwgIlsiLCAiKioiLCAiMSIgfTsKCiAgICBzdGQ6OnNvcnQoU3RyaW5nVmVjdC5iZWdpbigpLCBTdHJpbmdWZWN0LmVuZCgpLCBbXQogICAgICAgIChjb25zdCBzdGQ6OnN0cmluZyYgczEsIGNvbnN0IHN0ZDo6c3RyaW5nJiBzMikKICAgIHsKICAgICAgICBpZiAoczEuZW1wdHkoKSB8fCBzMi5lbXB0eSgpKSAKICAgICAgICAgICAgcmV0dXJuIHMxIDwgczI7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIGJvb2wgYWNbXSA9IHsgaXNhbHBoYShzMVswXSksIGlzYWxwaGEoczJbMF0pLAogICAgICAgICAgICAgICAgICAgICAgaXNkaWdpdChzMVswXSksIGlzZGlnaXQoczJbMF0pLAogICAgICAgICAgICAgICAgICAgICAgIWlzYWxudW0oczFbMF0pLCAhaXNhbG51bShzMlswXSkgfTsKCiAgICAgICAgLy8gSWYgYm90aCBzdHJpbmdzIHN0YXJ0IHdpdGggdGhlIHNhbWUgdHlwZSwgdGhlbiBqdXN0IHJldHVybiB0aGUKICAgICAgICAvLyBsZXNzZXIgb25lICAgICAgICAgICAgCiAgICAgICAgaWYgKChhY1swXSAmJiBhY1sxXSkgfHwgKGFjWzJdICYmIGFjWzNdKSB8fCAoYWNbNF0gJiYgYWNbNV0pKQogICAgICAgICAgICByZXR1cm4gczEgPCBzMjsKICAgICAgICByZXR1cm4gKGFjWzBdIHx8IGFjWzVdKTsKICAgIH0pOwogICAgY29weShTdHJpbmdWZWN0LmJlZ2luKCksIFN0cmluZ1ZlY3QuZW5kKCksIG9zdHJlYW1faXRlcmF0b3I8c3RyaW5nPihjb3V0LCAiXG4iKSk7Cn0=