#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;

size_t MkTimestamp(char *output, size_t size)
{
	milliseconds ms = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
	seconds s = duration_cast<seconds>(ms);
	time_t ctime = (time_t) s.count();
	tm components;
	size_t return_value = 0;
	
	if (!localtime_r(&ctime, &components)) return 0;
	if ((return_value = strftime(output, size, "%F %T:XXX", &components)) == 0) return 0;
	
	int ms_d1 = ms.count() / 100 % 10, ms_d2 = ms.count() / 10 % 10, ms_d3 = ms.count() % 10;
	output[return_value - 3] = ms_d1 + '0';
	output[return_value - 2] = ms_d2 + '0';
	output[return_value - 1] = ms_d3 + '0';
	return return_value;
}

int main() {
	char buffer[64];
	string timestamp(buffer, MkTimestamp(buffer, sizeof buffer));
	cout << timestamp << endl;
	return 0;
}