#include <iostream>
#include <string>
#include <vector>
using namespace std;

void print()
{
	static int i = 1;
	cout << "I'm here [" << i << "]" << endl;
	i++;
}

int main() {
	string test1 = "1234567890123456789";
	string test2 = "67890123456789";
	string test3 = "1234";
	
	vector<string> all;
	all.push_back(test1);
	all.push_back(test2);
	all.push_back(test3);
	size_t iS = 5;
	
	size_t start = 0;
	size_t length = 19;
	bool reverse = true;
	
	try {
		
		for (unsigned int i = 0; i < 3; i++)
		{
			string curr = all[i];
			
			if (reverse)
			{
				size_t tempLen = length;
				if (iS + tempLen > curr.length())
					tempLen = curr.length() - iS;
					
				start = curr.length() - (iS + tempLen);
				length = tempLen;
			}
			
			size_t len = ((start + length) > curr.length()) ? (curr.length() - start) : length;
			
			string part;
			part = curr.substr(start, len);
			
			part.assign(part.length(), 0x2A);
			
			cout << "Masked [" << curr << "] is [" << curr.replace(start, len, part) << "]" << endl;
		}
	}
	catch (exception &e)
	{
		cout << "Caught [" << e.what() << "]" << endl;
	}
	
	return 0;
}