#include <iostream>
#include <vector>
#include <string>
#include <sstream>

typedef std::pair<char, std::size_t> CS;
typedef std::vector<CS> VecCS;

std::string StringCast(int N){
	std::stringstream ss;

	ss << N;
	return ss.str();
}

VecCS CountChar(std::string str){
	CS P = std::make_pair(str[0], 0);
	VecCS vec;

	for (std::size_t i = 0; i < str.size(); i++){
		if (P.first != str[i]){
			vec.push_back(P);
			P = std::make_pair(str[i], 1);
		}
		else{
			P.second++;
		}
	}
	vec.push_back(P);
	return vec;
}

std::string ToString(VecCS vec){
	std::string str;
	for (auto& o: vec){
		str += StringCast(o.second);
		str += o.first;
	}

	return str;
}

int main(){
	std::string str = "1";
	std::size_t N = 10;
	std::size_t i=0;
	char *Answer[] = { "1", "11", "21", "1211", "111221", "312211", "13112221", "1113213211", "31131211131221", "13211311123113112211", "11131221133112132113212221" };


	for (i = 0; i < N; i++){
		std::cout << i << ":" << str << ' ' << ((str == Answer[i]) ? " " : "Invalid!!") << std::endl;
		auto ret = CountChar(str);
		str = ToString(ret);
	}
	std::cout << i << ":" << str << ' ' << ((str == Answer[i]) ? " " : "Invalid!!") << std::endl;
	
	return 0;
}