#include <iostream>
#include <tuple>
#include <unordered_map>
using namespace std;
using coord1D = std::size_t;
using coord2D = std::pair<coord1D,coord1D>;
struct pair_hash {
template <class T1, class T2>
std::size_t operator() (const std::pair<T1, T2> &pair) const {
return std::hash<T1>()(pair.first) ^ std::hash<T2>()(pair.second);
}
};
class matrix {
std::unordered_map<coord2D, double, pair_hash> m;
public:
auto& operator[] (pair<int,int> p) {
if (p.first>p.second)
p = make_pair(p.second, p.first);
return m[p];
}
};
int main() {
matrix m;
m[make_pair(1,5)] = 27.2;
cout << m[make_pair(1,5)]<<" "<<m[make_pair(5,1)]<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHVwbGU+CiNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdXNpbmcgY29vcmQxRCA9IHN0ZDo6c2l6ZV90Owp1c2luZyBjb29yZDJEID0gc3RkOjpwYWlyPGNvb3JkMUQsY29vcmQxRD47CnN0cnVjdCBwYWlyX2hhc2ggewogICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KICAgIHN0ZDo6c2l6ZV90IG9wZXJhdG9yKCkgKGNvbnN0IHN0ZDo6cGFpcjxUMSwgVDI+ICZwYWlyKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIHN0ZDo6aGFzaDxUMT4oKShwYWlyLmZpcnN0KSBeIHN0ZDo6aGFzaDxUMj4oKShwYWlyLnNlY29uZCk7CiAgICB9Cn07CmNsYXNzIG1hdHJpeCB7CglzdGQ6OnVub3JkZXJlZF9tYXA8Y29vcmQyRCwgZG91YmxlLCBwYWlyX2hhc2g+IG07IApwdWJsaWM6IAoJYXV0byYgb3BlcmF0b3JbXSAocGFpcjxpbnQsaW50PiBwKSB7IAoJCWlmIChwLmZpcnN0PnAuc2Vjb25kKQoJCSAgICBwID0gbWFrZV9wYWlyKHAuc2Vjb25kLCBwLmZpcnN0KTsKCQlyZXR1cm4gbVtwXTsKCX0KfTsKCmludCBtYWluKCkgewoJbWF0cml4IG07CgltW21ha2VfcGFpcigxLDUpXSA9IDI3LjI7Cgljb3V0IDw8IG1bbWFrZV9wYWlyKDEsNSldPDwiICI8PG1bbWFrZV9wYWlyKDUsMSldPDxlbmRsOwoJcmV0dXJuIDA7Cn0=