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

int main() {
	std::regex r("(a)|(b)|(c)");
	std::string s = "abcab";
	std::vector<std::string> astrings;
	std::vector<std::string> bstrings;
	std::vector<std::string> cstrings;
	
	for(std::sregex_iterator i = std::sregex_iterator(s.begin(), s.end(), r);
                             i != std::sregex_iterator();
                             ++i)
    {
        std::smatch m = *i;
        if (m[1].matched) {
        	astrings.push_back(m[1].str());
        	std::cout << "1:" << "    Added m[1]: " << m[1].str() << " at Position " << m.position(1) << '\n';
        }
        else if (m[2].matched) {
        	bstrings.push_back(m[2].str());
        	std::cout << "2:" << "    Added m[2]: " << m[2].str() << " at Position " << m.position(2) << '\n';
        }
        else if (m[3].matched) {
        	cstrings.push_back(m[3].str());
        	std::cout << "3:" << "    Added m[3]: " << m[3].str() << " at Position " << m.position(3) << '\n';
        }
	}
	// Printing vectors
    for (auto i: astrings)
  		std::cout << i << ' ';
  	std::cout << "\n";
  	for (auto i: bstrings)
  		std::cout << i << ' ';
    std::cout << "\n";
  	for (auto i: cstrings)
  		std::cout << i << ' ';

	return 0;
}
