#include <map>
#include <string>
 
struct ParseData;
using MapValue = std::map<std::string, ParseData>;
 
struct ParseData
{
   std::string string_value;
   MapValue map_value;
};
 
int main()
{
   // Lowest level values.
   ParseData parseData1_1;
   ParseData parseData1_2;
   ParseData parseData1_3;
   ParseData parseData1_4;
   ParseData parseData1_5;
   ParseData parseData1_6;
 
   parseData1_1.string_value = "A";
   parseData1_2.string_value = "B";
   parseData1_3.string_value = "C";
 
   parseData1_4.string_value = "D";
   parseData1_5.string_value = "E";
   parseData1_6.string_value = "F";
 
   // Next level values.
   ParseData parseData2_1;
   parseData2_1.map_value["a"] = parseData1_1;
   parseData2_1.map_value["b"] = parseData1_2;
   parseData2_1.map_value["c"] = parseData1_3;
 
   ParseData parseData2_2;
   parseData2_2.map_value["d"] = parseData1_4;
   parseData2_2.map_value["e"] = parseData1_5;
   parseData2_2.map_value["f"] = parseData1_3;
 
   // Next level values.
   ParseData parseData3_1;
   parseData3_1.map_value["1"] = parseData2_1;
   parseData3_1.map_value["2"] = parseData2_2;
}
 
				I2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHN0cmluZz4KCnN0cnVjdCBQYXJzZURhdGE7CnVzaW5nIE1hcFZhbHVlID0gc3RkOjptYXA8c3RkOjpzdHJpbmcsIFBhcnNlRGF0YT47CgpzdHJ1Y3QgUGFyc2VEYXRhCnsKICAgc3RkOjpzdHJpbmcgc3RyaW5nX3ZhbHVlOwogICBNYXBWYWx1ZSBtYXBfdmFsdWU7Cn07CgppbnQgbWFpbigpCnsKICAgLy8gTG93ZXN0IGxldmVsIHZhbHVlcy4KICAgUGFyc2VEYXRhIHBhcnNlRGF0YTFfMTsKICAgUGFyc2VEYXRhIHBhcnNlRGF0YTFfMjsKICAgUGFyc2VEYXRhIHBhcnNlRGF0YTFfMzsKICAgUGFyc2VEYXRhIHBhcnNlRGF0YTFfNDsKICAgUGFyc2VEYXRhIHBhcnNlRGF0YTFfNTsKICAgUGFyc2VEYXRhIHBhcnNlRGF0YTFfNjsKCiAgIHBhcnNlRGF0YTFfMS5zdHJpbmdfdmFsdWUgPSAiQSI7CiAgIHBhcnNlRGF0YTFfMi5zdHJpbmdfdmFsdWUgPSAiQiI7CiAgIHBhcnNlRGF0YTFfMy5zdHJpbmdfdmFsdWUgPSAiQyI7CgogICBwYXJzZURhdGExXzQuc3RyaW5nX3ZhbHVlID0gIkQiOwogICBwYXJzZURhdGExXzUuc3RyaW5nX3ZhbHVlID0gIkUiOwogICBwYXJzZURhdGExXzYuc3RyaW5nX3ZhbHVlID0gIkYiOwoKICAgLy8gTmV4dCBsZXZlbCB2YWx1ZXMuCiAgIFBhcnNlRGF0YSBwYXJzZURhdGEyXzE7CiAgIHBhcnNlRGF0YTJfMS5tYXBfdmFsdWVbImEiXSA9IHBhcnNlRGF0YTFfMTsKICAgcGFyc2VEYXRhMl8xLm1hcF92YWx1ZVsiYiJdID0gcGFyc2VEYXRhMV8yOwogICBwYXJzZURhdGEyXzEubWFwX3ZhbHVlWyJjIl0gPSBwYXJzZURhdGExXzM7CgogICBQYXJzZURhdGEgcGFyc2VEYXRhMl8yOwogICBwYXJzZURhdGEyXzIubWFwX3ZhbHVlWyJkIl0gPSBwYXJzZURhdGExXzQ7CiAgIHBhcnNlRGF0YTJfMi5tYXBfdmFsdWVbImUiXSA9IHBhcnNlRGF0YTFfNTsKICAgcGFyc2VEYXRhMl8yLm1hcF92YWx1ZVsiZiJdID0gcGFyc2VEYXRhMV8zOwoKICAgLy8gTmV4dCBsZXZlbCB2YWx1ZXMuCiAgIFBhcnNlRGF0YSBwYXJzZURhdGEzXzE7CiAgIHBhcnNlRGF0YTNfMS5tYXBfdmFsdWVbIjEiXSA9IHBhcnNlRGF0YTJfMTsKICAgcGFyc2VEYXRhM18xLm1hcF92YWx1ZVsiMiJdID0gcGFyc2VEYXRhMl8yOwp9Cg==