#include <iostream>
#include <algorithm>
#include <iterator>
#include <set>
using namespace std;
template< class InputIterator1, class InputIterator2 >
bool isAnagram( InputIterator1 beg1, InputIterator2 end1,
InputIterator2 beg2, InputIterator2 end2)
{
if( distance( beg1, end1 ) != distance( beg2, end2 ) )
{
return false;
}
typedef typename iterator_traits<InputIterator1>::value_type _T1;
multiset< _T1 > sorted1( beg1, end1 );
typedef typename iterator_traits<InputIterator2>::value_type _T2;
multiset< _T2 > sorted2( beg2, end2 );
return sorted1 == sorted2;
}
int main()
{
const char* s1 = "nana";
const char* s2 = "anna";
cout << isAnagram( s1, s1+4, s2, s2+4 ) << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxzZXQ+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZTwgY2xhc3MgSW5wdXRJdGVyYXRvcjEsIGNsYXNzIElucHV0SXRlcmF0b3IyID4KYm9vbCBpc0FuYWdyYW0oIElucHV0SXRlcmF0b3IxIGJlZzEsIElucHV0SXRlcmF0b3IyIGVuZDEsCiAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yMiBiZWcyLCBJbnB1dEl0ZXJhdG9yMiBlbmQyKQp7CiAgICBpZiggZGlzdGFuY2UoIGJlZzEsIGVuZDEgKSAhPSBkaXN0YW5jZSggYmVnMiwgZW5kMiApICkKICAgIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8SW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlIF9UMTsKICAgIG11bHRpc2V0PCBfVDEgPiBzb3J0ZWQxKCBiZWcxLCBlbmQxICk7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8SW5wdXRJdGVyYXRvcjI+Ojp2YWx1ZV90eXBlIF9UMjsKICAgIG11bHRpc2V0PCBfVDIgPiBzb3J0ZWQyKCBiZWcyLCBlbmQyICk7CgogICAgcmV0dXJuIHNvcnRlZDEgPT0gc29ydGVkMjsKfQoKaW50IG1haW4oKQp7CiAgICBjb25zdCBjaGFyKiBzMSA9ICJuYW5hIjsKICAgIGNvbnN0IGNoYXIqIHMyID0gImFubmEiOwoKICAgIGNvdXQgPDwgaXNBbmFncmFtKCBzMSwgczErNCwgczIsIHMyKzQgKSA8PCBlbmRsOwp9Cg==