#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;
}