bool isNum(char ch)
{
	return ch >= '0' && ch <= '9';
}

string decode(string str)
{
	int index1 = 0;
	int index2 = 1;
	int index3 = 0;
	long long int len = 0;
	vector<vector<int>> vecIndecx;
	vector<int> vecCount;
	while(index2 < str.size())
	{
		char ch = str[index2];
		if (isNum(ch))
		{
			int count = ch - '0';
			index3 = index2 + 1;
			while(index3 < str.size() && isNum(str[index3]))
			{
				count *= 10;
				count += (str[index3] - '0');

				index3++;
			}
			vecCount.push_back(count);
			vector<int> temp;
			temp.push_back(index1);
			temp.push_back(index2);
			vecIndecx.push_back(temp);
			
			len += count * (index2 - index1);

			index1 = index3;
			index2 = index1 + 1;
		}
		else
		{
			index2++;
		}
	}

	string ret;
	ret.resize(len+1);
	int retIndex = 0;
	vector<vector<int>>::iterator iter = vecIndecx.begin();
	vector<int>::iterator countIter = vecCount.begin();
	for(int i=0; i<vecIndecx.size(); i++)
	{
		for (int j = 0; j < *countIter; j++)
		{
			for(int index = (*iter)[0]; index < (*iter)[1]; index++)
			{
				ret[retIndex++] = str[index];
			}
		}

		iter++;
		countIter++;
	}

	ret[retIndex] = '\0';

	return ret;
}