#include <iostream>
#include <string>
#include <vector>
#include <assert.h>
using namespace std;
template <class Char, class Trait>
bool isAnagram(const basic_string<Char, Trait> & input1, const basic_string<Char, Trait> & input2) {
typedef vector<Char> Vector;
Vector data1(input1.begin(), input1.end()), data2(input2.begin(), input2.end());
if (data1.size() != data2.size())
return false;
for(char c: data1) {
bool found = false;
for (typename Vector::iterator i = data2.begin(); i != data2.end(); i++) {
if (Trait::eq(c, *i)) {
data2.erase(i);
found = true;
break;
}
}
if (!found)
return false;
}
assert(data2.empty());
return true;
}
void check(string input1, string input2) {
cout << input1 << "/" << input2 << " = " << (isAnagram(input1, input2) ? "true" : "false") << "\n";
}
void check(wstring input1, wstring input2) {
wcout << input1 << L"/" << input2 << L" = " << (isAnagram(input1, input2) ? L"true" : L"false") << L"\n";
}
int main() {
check("blah", "habl");
check("heck", "eckl");
check(L"русский", L"урсский");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YXNzZXJ0Lmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhciwgY2xhc3MgVHJhaXQ+CmJvb2wgaXNBbmFncmFtKGNvbnN0IGJhc2ljX3N0cmluZzxDaGFyLCBUcmFpdD4gJiAgaW5wdXQxLCBjb25zdCBiYXNpY19zdHJpbmc8Q2hhciwgVHJhaXQ+ICYgaW5wdXQyKSB7Cgl0eXBlZGVmIHZlY3RvcjxDaGFyPiBWZWN0b3I7CglWZWN0b3IgZGF0YTEoaW5wdXQxLmJlZ2luKCksIGlucHV0MS5lbmQoKSksIGRhdGEyKGlucHV0Mi5iZWdpbigpLCBpbnB1dDIuZW5kKCkpOwoJaWYgKGRhdGExLnNpemUoKSAhPSBkYXRhMi5zaXplKCkpCgkJcmV0dXJuIGZhbHNlOwoJZm9yKGNoYXIgYzogZGF0YTEpIHsKCQlib29sIGZvdW5kID0gZmFsc2U7CgkJZm9yICh0eXBlbmFtZSBWZWN0b3I6Oml0ZXJhdG9yIGkgPSBkYXRhMi5iZWdpbigpOyBpICE9IGRhdGEyLmVuZCgpOyBpKyspIHsKCQkJaWYgKFRyYWl0OjplcShjLCAqaSkpIHsKCQkJCWRhdGEyLmVyYXNlKGkpOwoJCQkJZm91bmQgPSB0cnVlOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJaWYgKCFmb3VuZCkKCQkJcmV0dXJuIGZhbHNlOwoJfQoJYXNzZXJ0KGRhdGEyLmVtcHR5KCkpOwoJcmV0dXJuIHRydWU7Cn0KCnZvaWQgY2hlY2soc3RyaW5nIGlucHV0MSwgc3RyaW5nIGlucHV0MikgewoJY291dCA8PCBpbnB1dDEgPDwgIi8iIDw8IGlucHV0MiA8PCAiID0gIiA8PCAoaXNBbmFncmFtKGlucHV0MSwgaW5wdXQyKSA/ICJ0cnVlIiA6ICJmYWxzZSIpIDw8ICJcbiI7Cn0KCnZvaWQgY2hlY2sod3N0cmluZyBpbnB1dDEsIHdzdHJpbmcgaW5wdXQyKSB7Cgl3Y291dCA8PCBpbnB1dDEgPDwgTCIvIiA8PCBpbnB1dDIgPDwgTCIgPSAiIDw8IChpc0FuYWdyYW0oaW5wdXQxLCBpbnB1dDIpID8gTCJ0cnVlIiA6IEwiZmFsc2UiKSA8PCBMIlxuIjsKfQoKaW50IG1haW4oKSB7CgljaGVjaygiYmxhaCIsICJoYWJsIik7CgljaGVjaygiaGVjayIsICJlY2tsIik7CgljaGVjayhMItGA0YPRgdGB0LrQuNC5IiwgTCLRg9GA0YHRgdC60LjQuSIpOwoJcmV0dXJuIDA7Cn0=