#include <iostream>
#include <string>
#include <map>
using namespace std;
#define endl "\n";
string s;
map<char, int> ma;
char arr[26];
int arr2[26];
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin >> s;
	for (int i = 0; i < s.size(); ++i)
	{
		++ma[s[i]];
		arr[s[i] - 'A'] = s[i];
	}
	int re = 0;
	int idx = 0;
	for (auto va : ma)
	{
		if (va.second % 2 == 1)
		{
			++re;
			idx = va.first - 'A';
			arr2[va.first - 'A'] = va.second;
		}		
	}
	if (re >= 2)
	{
		cout << "I'm Sorry Hansoo";
		return  0;
	}
	else if (re == 1)
	{
		for (int i = 0; i < arr2[idx]; ++i)
		{
			
			
		}
	}
	else if (re == 0)
	{
		int a = 10;
	}
	return 0;
}처음에 위와같이 매우 더럽고 길게 만들었다. 알파벳이 몇개인지 새는 부분
for(char c : s ) cnt[i]++; 
// 이렇게 안해버림..#include <iostream>
#include <string>
#include <map>
using namespace std;
#define endl "\n";
string s, ret;
int cnt[200], flag;
char mid;
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin >> s;
	for (char a : s) cnt[a]++;
	for (int i = 'Z'; i >= 'A'; --i)
	{
		if (cnt[i] & 1)
		{
			mid = char(i); ++flag;
			--cnt[i];
		}
		if (flag == 2) break;
		for (int j = 0; j < cnt[i]; j += 2)
		{
			ret = char(i) + ret;
			ret += char(i);
		}
	}
	if (mid) ret.insert(ret.begin() + ret.size() / 2, mid);
	if (flag == 2) cout << "I'm Sorry Hansoo";
	else cout << ret << endl;
	
	return 0;
}일단 오름차순으로 알파벳이 (아스키 기준) 큰것부터 다 때려박아 넣는데
"앞 뒤로" 넣는 부분이
for (int j = 0; j < cnt[i]; j += 2)
{
	ret = char(i) + ret;
	ret += char(i);
}위의 코드처럼 된다.
이거 처음에 무슨 코드인지 이해가 안갔는데
ret = 'A' + 'AB' 이렇게 하면
ret는 'AAB'이렇게 된다음에 ret += 'A'해버리면
ret 'B'다음에 'A'가 붙는 식으로 되는 부분이다.
매번 하면서도 계속 까먹기도하고
문제에 맞게 카운팅 배열을 만드는 부분이 아직 많이 어렵다.
또한
for (int i = 0; i < s.size(); ++i)
	cnt[i]++;
    
이거나
for (char c : s)
	cnt[c]++;
    
이거랑 똑같은데 이거 사용을 또 안함...mid를 기억해둔 다음에 나중에 insert로 삽입하는 부분
f (mid) ret.insert(ret.begin() + ret.size() / 2, mid);