#include <iostream>
#include <map>
#include <string>
using namespace std;
#define EXPAND_VALUES(action) \
action (1, SUNDAY, "Sunday") \
action (2, MONDAY, "Monday") \
action (3, TUESDAY, "Tuesday") \
action (4, WEDNESDAY, "Wednesday") \
action (5, THURSDAY, "Thursday") \
action (6, FRIDAY, "Friday") \
action (7, SATURDAY, "Saturday")
#define DEF_ENUM(i,v,s) v = i,
enum class Days : int { EXPAND_VALUES(DEF_ENUM) };
#undef DEF_ENUM
#define DEF_MAP(i,v,s) {i, Days::v},
std::map<int, Days> WeekMap { EXPAND_VALUES(DEF_MAP) };
#undef DEF_MAP
#define DEF_STR_MAP(i,v,s) {Days::v, s},
std::map<Days, std::string> WeekStrMap { EXPAND_VALUES(DEF_STR_MAP) };
#undef DEF_STR_MAP
int main() {
cout << WeekMap.size() << endl;
for (auto const & e : WeekMap)
cout << e.first << " -> " << int(e.second) << endl;
cout << WeekStrMap.size() << endl;
for (auto const & e : WeekStrMap)
cout << int(e.first) << " -> " << e.second << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBFWFBBTkRfVkFMVUVTKGFjdGlvbikJCQlcCglhY3Rpb24gKDEsIFNVTkRBWSwgICAgIlN1bmRheSIpCQlcCglhY3Rpb24gKDIsIE1PTkRBWSwgICAgIk1vbmRheSIpCQlcCglhY3Rpb24gKDMsIFRVRVNEQVksICAgIlR1ZXNkYXkiKQlcCglhY3Rpb24gKDQsIFdFRE5FU0RBWSwgIldlZG5lc2RheSIpCVwKCWFjdGlvbiAoNSwgVEhVUlNEQVksICAiVGh1cnNkYXkiKQlcCglhY3Rpb24gKDYsIEZSSURBWSwgICAgIkZyaWRheSIpCQlcCglhY3Rpb24gKDcsIFNBVFVSREFZLCAgIlNhdHVyZGF5IikKCiNkZWZpbmUgREVGX0VOVU0oaSx2LHMpCXYgPSBpLAplbnVtIGNsYXNzIERheXMgOiBpbnQgeyBFWFBBTkRfVkFMVUVTKERFRl9FTlVNKSB9OwojdW5kZWYgREVGX0VOVU0KCiNkZWZpbmUgREVGX01BUChpLHYscykJe2ksIERheXM6OnZ9LApzdGQ6Om1hcDxpbnQsIERheXM+IFdlZWtNYXAgeyBFWFBBTkRfVkFMVUVTKERFRl9NQVApIH07CiN1bmRlZiBERUZfTUFQCgojZGVmaW5lIERFRl9TVFJfTUFQKGksdixzKQl7RGF5czo6diwgc30sCnN0ZDo6bWFwPERheXMsIHN0ZDo6c3RyaW5nPiBXZWVrU3RyTWFwIHsgRVhQQU5EX1ZBTFVFUyhERUZfU1RSX01BUCkgfTsKI3VuZGVmIERFRl9TVFJfTUFQCgppbnQgbWFpbigpIHsKCWNvdXQgPDwgV2Vla01hcC5zaXplKCkgPDwgZW5kbDsKCWZvciAoYXV0byBjb25zdCAmIGUgOiBXZWVrTWFwKQoJCWNvdXQgPDwgZS5maXJzdCA8PCAiIC0+ICIgPDwgaW50KGUuc2Vjb25kKSA8PCBlbmRsOwoJY291dCA8PCBXZWVrU3RyTWFwLnNpemUoKSA8PCBlbmRsOwoJZm9yIChhdXRvIGNvbnN0ICYgZSA6IFdlZWtTdHJNYXApCgkJY291dCA8PCBpbnQoZS5maXJzdCkgPDwgIiAtPiAiIDw8IGUuc2Vjb25kIDw8IGVuZGw7CgkJCglyZXR1cm4gMDsKfQ==