#include <iostream>
#include <vector>
#include <algorithm>
#include <ostream>
struct Coordinate
{
public:
int x;
int y;
Coordinate(int valuex, int valuey) : x(valuex), y(valuey) {}
};
bool sortcomp(const Coordinate &a, const Coordinate &b)
{
return (a.x < b.x) || (a.y < b.y);
}
bool compare(const Coordinate &a, const Coordinate &b)
{
return (a.x == b.x) && (a.y == b.y);
}
std::ostream& operator << (std::ostream& os, const std::vector<Coordinate> &v)
{
for (auto it = v.begin(); it != v.end() - 1; ++it)
std::cout<<"("<<it->x<<", "<<it->y<<"), ";
std::cout<<"("<<v[v.size() - 1].x<<", "<<v[v.size() - 1].y<<")";
}
int main()
{
std::vector<Coordinate> v = {{0,0}, {0,1}, {0,0}, {0,-1}, {0,-2}};
std::sort(v.begin() + 1, v.end(), sortcomp);
v.erase(std::unique(v.begin() + 1, v.end(), compare), v.end());
if (v.size() > 2)
{
for (unsigned i = 1; i < v.size() - 1; ++i)
{
v.erase(v.begin() + i);
i = 0;
}
}
std::cout<<v;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8b3N0cmVhbT4KCnN0cnVjdCBDb29yZGluYXRlCnsKCXB1YmxpYzoKCQlpbnQgeDsKCQlpbnQgeTsKCQkKCQlDb29yZGluYXRlKGludCB2YWx1ZXgsIGludCB2YWx1ZXkpIDogeCh2YWx1ZXgpLCB5KHZhbHVleSkge30KfTsKCmJvb2wgc29ydGNvbXAoY29uc3QgQ29vcmRpbmF0ZSAmYSwgY29uc3QgQ29vcmRpbmF0ZSAmYikKewoJcmV0dXJuIChhLnggPCBiLngpIHx8IChhLnkgPCBiLnkpOwp9Cgpib29sIGNvbXBhcmUoY29uc3QgQ29vcmRpbmF0ZSAmYSwgY29uc3QgQ29vcmRpbmF0ZSAmYikKewoJcmV0dXJuIChhLnggPT0gYi54KSAmJiAoYS55ID09IGIueSk7Cn0KCnN0ZDo6b3N0cmVhbSYgb3BlcmF0b3IgPDwgKHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IHN0ZDo6dmVjdG9yPENvb3JkaW5hdGU+ICZ2KQp7Cglmb3IgKGF1dG8gaXQgPSB2LmJlZ2luKCk7IGl0ICE9IHYuZW5kKCkgLSAxOyArK2l0KQoJCXN0ZDo6Y291dDw8IigiPDxpdC0+eDw8IiwgIjw8aXQtPnk8PCIpLCAiOwoJCQoJc3RkOjpjb3V0PDwiKCI8PHZbdi5zaXplKCkgLSAxXS54PDwiLCAiPDx2W3Yuc2l6ZSgpIC0gMV0ueTw8IikiOwp9CmludCBtYWluKCkKewoJc3RkOjp2ZWN0b3I8Q29vcmRpbmF0ZT4gdiA9IHt7MCwwfSwgezAsMX0sIHswLDB9LCB7MCwtMX0sIHswLC0yfX07CgkKCXN0ZDo6c29ydCh2LmJlZ2luKCkgKyAxLCB2LmVuZCgpLCBzb3J0Y29tcCk7Cgl2LmVyYXNlKHN0ZDo6dW5pcXVlKHYuYmVnaW4oKSArIDEsIHYuZW5kKCksIGNvbXBhcmUpLCB2LmVuZCgpKTsKCQoJaWYgKHYuc2l6ZSgpID4gMikKCXsKCQlmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgdi5zaXplKCkgLSAxOyArK2kpCgkJewoJCQl2LmVyYXNlKHYuYmVnaW4oKSArIGkpOwoJCQlpID0gMDsKCQl9Cgl9CgkKCXN0ZDo6Y291dDw8djsKfQ==