#include <iostream>
#include <iterator>
#include <vector>
#include <regex>

std::vector<int> parse(const std::string &iStr) {
  std::vector<int> Ret;
  std::vector<std::string> Tmp; 
  std::string Work(iStr);
  Work.erase(0,Work.find_first_not_of(' '));
  Work.erase(Work.find_last_not_of(' ')+1); 
  std::cout << "\"" << iStr << "\": ";    
  try {  
    if (Work.length() == 0) throw std::invalid_argument("Пустая строка");
    if (Work[0] == ',') throw std::invalid_argument("В первой позиции не число");
    if (Work[Work.length()-1] == ',') throw std::invalid_argument("В последней позиции не число");  
    std::regex Rx("\\s*,\\s*");
    std::sregex_token_iterator Begin(Work.begin(), Work.end(), Rx, -1);
    std::sregex_token_iterator End;
    while (Begin != End) Tmp.push_back((Begin++)->str());
    Rx = "^\\s*((\\+|-)?[0-9]+)\\s*,?\\s*$";
    int Pos = 0;  
    for(const auto &i:Tmp) {  
      std::smatch Match;  
      std::regex_search(i, Match, Rx);
      if (Match.size() == 3) 
        Ret.push_back(std::stoi(Match.str(1),nullptr,10)); 
      else 
        throw std::invalid_argument("В позиции "+std::to_string(Pos)+" не число");
      Pos++;                
    }  
    std::cout << "Ok";  
  } catch (std::invalid_argument &E) {
    std::cout << E.what();
  }
  std::cout << std:: endl;
  return Ret;
}

int main() {
  parse("1, 4, 5, -6, -8 , 3, 1");
  parse("       5 , 6, 57, +68 , 18, 32, 4   ");
  parse("77");
  parse("");
  parse("    ");
  parse("1, 4, 5, 6, 8, 3, 1,");
  parse(" , 6, 57, 68 , 18, 32, 4");
  parse("5, 6, , 68, 18, 32, 4");
  parse("5, 6,, 68, 18, 32, 4");
  parse("5, 6, T, 68, 18, 32, 4");
  parse("5, 6, 34T, 68, 18, 32, 4");
  parse("5, 6, 34 55, 68, 18, 32, 4");
  parse(",");
  parse(",,");
  parse(",, ,, ,,,");
  return 0;
}