#include <iostream>
#include <sstream>
#include <vector>
#include <utility>
typedef std::pair<int, int> point;
typedef std::vector<point> points;
std::istream& operator>>(std::istream &in, point &out)
{
char ch1, ch2, ch3;
if (in >> ch1 >> out.first >> ch2 >> out.second >> ch3)
{
if ((ch1 != '(') || (ch2 != ',') || (ch3 != ')'))
in.setstate(std::ios_base::failbit);
}
return in;
}
std::istream& operator>>(std::istream &in, points &out)
{
point pt;
char ch;
if (!(in >> ch))
return in;
if (ch != '[')
{
in.setstate(std::ios_base::failbit);
return in;
}
ch = in.peek();
do
{
if (ch == std::istream::traits_type::eof())
{
in.setstate(std::ios_base::failbit);
break;
}
if (ch == ']')
{
in.ignore(1);
break;
}
if (ch != '(')
{
in.setstate(std::ios_base::failbit);
break;
}
if (!(in >> pt))
break;
out.push_back(pt);
ch = in.peek();
if (ch == ',')
{
in.ignore(1);
ch = in.peek();
}
}
while (true);
return in;
}
int main() {
std::istringstream iss("[(1,2),(10,4),(5,12)]");
points coords;
iss >> coords;
for(auto &pt: coords)
std::cout << pt.first << ' ' << pt.second << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHV0aWxpdHk+Cgp0eXBlZGVmIHN0ZDo6cGFpcjxpbnQsIGludD4gcG9pbnQ7CnR5cGVkZWYgc3RkOjp2ZWN0b3I8cG9pbnQ+IHBvaW50czsKCnN0ZDo6aXN0cmVhbSYgb3BlcmF0b3I+PihzdGQ6OmlzdHJlYW0gJmluLCBwb2ludCAmb3V0KQp7CiAgICBjaGFyIGNoMSwgY2gyLCBjaDM7CiAgICBpZiAoaW4gPj4gY2gxID4+IG91dC5maXJzdCA+PiBjaDIgPj4gb3V0LnNlY29uZCA+PiBjaDMpCiAgICB7CiAgICAgICAgaWYgKChjaDEgIT0gJygnKSB8fCAoY2gyICE9ICcsJykgfHwgKGNoMyAhPSAnKScpKSAKICAgICAgICAgICAgaW4uc2V0c3RhdGUoc3RkOjppb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICB9CiAgICByZXR1cm4gaW47Cn0KCnN0ZDo6aXN0cmVhbSYgb3BlcmF0b3I+PihzdGQ6OmlzdHJlYW0gJmluLCBwb2ludHMgJm91dCkKewogICAgcG9pbnQgcHQ7CiAgICBjaGFyIGNoOwoKICAgIGlmICghKGluID4+IGNoKSkKICAgICAgICByZXR1cm4gaW47CgogICAgaWYgKGNoICE9ICdbJykKICAgIHsKICAgICAgICBpbi5zZXRzdGF0ZShzdGQ6Omlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICByZXR1cm4gaW47CiAgICB9CgogICAgY2ggPSBpbi5wZWVrKCk7CiAgICBkbwogICAgewogICAgICAgIGlmIChjaCA9PSBzdGQ6OmlzdHJlYW06OnRyYWl0c190eXBlOjplb2YoKSkKICAgICAgICB7CiAgICAgICAgICAgIGluLnNldHN0YXRlKHN0ZDo6aW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIGlmIChjaCA9PSAnXScpCiAgICAgICAgewogICAgICAgICAgICBpbi5pZ25vcmUoMSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNoICE9ICcoJykKICAgICAgICB7CiAgICAgICAgICAgIGluLnNldHN0YXRlKHN0ZDo6aW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIGlmICghKGluID4+IHB0KSkKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIG91dC5wdXNoX2JhY2socHQpOwoKICAgICAgICBjaCA9IGluLnBlZWsoKTsKICAgICAgICBpZiAoY2ggPT0gJywnKQogICAgICAgIHsKICAgICAgICAgICAgaW4uaWdub3JlKDEpOwogICAgICAgICAgICBjaCA9IGluLnBlZWsoKTsKICAgICAgIH0KICAgIH0KICAgIHdoaWxlICh0cnVlKTsKCiAgICByZXR1cm4gaW47Cn0KCmludCBtYWluKCkgewoJc3RkOjppc3RyaW5nc3RyZWFtIGlzcygiWygxLDIpLCgxMCw0KSwoNSwxMildIik7CiAgICBwb2ludHMgY29vcmRzOwogICAgaXNzID4+IGNvb3JkczsKICAgIGZvcihhdXRvICZwdDogY29vcmRzKQogICAgICAgIHN0ZDo6Y291dCA8PCBwdC5maXJzdCA8PCAnICcgPDwgcHQuc2Vjb25kIDw8IHN0ZDo6ZW5kbDsKCXJldHVybiAwOwp9