#include <iostream>
using namespace std;
template<class geo_t = long long>
struct vector2D {
geo_t x, y;
vector2D(geo_t x = 0, geo_t y = 0) : x(x), y(y) {}
vector2D& operator++() { return ++x, *this; }
vector2D& operator--() { return --x, *this; }
vector2D operator++(int) && = delete;
vector2D operator--(int) && = delete;
vector2D& operator++(int) & { return ++y, *this; }
vector2D& operator--(int) & { return --y, *this; }
friend ostream &operator << (ostream &os, const vector2D &u) {
if (os.rdbuf() == cerr.rdbuf()) { os << "(" << u.x << "; " << u.y << ")"; return os; }
else { os << u.x << " " << u.y; return os; }
}
};
using Point = vector2D<long long>;
using Pointf = vector2D<double>;
template<class T>
void test(vector2D<T> u)
{
cout << "++Pre Order: " << u << " -> " << ++u; cout << " | after: " << u << endl;
cout << "--Pre Order: " << u << " -> " << --u; cout << " | after: " << u << endl;
cout << " Post++ Order: " << u << " -> " << u++; cout << " | after: " << u << endl;
cout << " Post-- Order: " << u << " -> " << u--; cout << " | after: " << u << endl;
cout << "++Mixed-- Order: " << u << " -> " << ++--++u--++--; cout << " | after: " << u << endl;
cout << string(16, '-') << endl;
}
int main() {
Point u1(0, 0);
Point u2(27, 2);
test(u1);
test(u2);
Pointf v1(0, 0);
Pointf v2(27.2, 20.04);
test(v1);
test(v2);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8Y2xhc3MgZ2VvX3QgPSBsb25nIGxvbmc+CnN0cnVjdCB2ZWN0b3IyRCB7CglnZW9fdCB4LCB5OwoJdmVjdG9yMkQoZ2VvX3QgeCA9IDAsIGdlb190IHkgPSAwKSA6IHgoeCksIHkoeSkge30KCgl2ZWN0b3IyRCYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICsreCwgKnRoaXM7IH0KICAgIHZlY3RvcjJEJiBvcGVyYXRvci0tKCkgeyByZXR1cm4gLS14LCAqdGhpczsgfQogICAgdmVjdG9yMkQgb3BlcmF0b3IrKyhpbnQpICYmID0gZGVsZXRlOwogICAgdmVjdG9yMkQgb3BlcmF0b3ItLShpbnQpICYmID0gZGVsZXRlOwogICAgdmVjdG9yMkQmIG9wZXJhdG9yKysoaW50KSAmIHsgcmV0dXJuICsreSwgKnRoaXM7IH0KICAgIHZlY3RvcjJEJiBvcGVyYXRvci0tKGludCkgJiB7IHJldHVybiAtLXksICp0aGlzOyB9CiAgICBmcmllbmQgb3N0cmVhbSAmb3BlcmF0b3IgPDwgKG9zdHJlYW0gJm9zLCBjb25zdCB2ZWN0b3IyRCAmdSkgewoJCWlmIChvcy5yZGJ1ZigpID09IGNlcnIucmRidWYoKSkgeyBvcyA8PCAiKCIgPDwgdS54IDw8ICI7ICIgPDwgdS55IDw8ICIpIjsgcmV0dXJuIG9zOyB9CgkJZWxzZSB7IG9zIDw8IHUueCA8PCAiICIgPDwgdS55OyByZXR1cm4gb3M7IH0KICAgIH0KfTsKdXNpbmcgUG9pbnQgPSB2ZWN0b3IyRDxsb25nIGxvbmc+Owp1c2luZyBQb2ludGYgPSB2ZWN0b3IyRDxkb3VibGU+OwoKdGVtcGxhdGU8Y2xhc3MgVD4Kdm9pZCB0ZXN0KHZlY3RvcjJEPFQ+IHUpCnsKCWNvdXQgPDwgIisrUHJlIE9yZGVyOiAgICAgIiA8PCB1IDw8ICIgLT4gIiA8PCArK3U7IGNvdXQgPDwgIiB8IGFmdGVyOiAiIDw8IHUgPDwgZW5kbDsKCWNvdXQgPDwgIi0tUHJlIE9yZGVyOiAgICAgIiA8PCB1IDw8ICIgLT4gIiA8PCAtLXU7IGNvdXQgPDwgIiB8IGFmdGVyOiAiIDw8IHUgPDwgZW5kbDsKCWNvdXQgPDwgIiAgUG9zdCsrIE9yZGVyOiAgIiA8PCB1IDw8ICIgLT4gIiA8PCB1Kys7IGNvdXQgPDwgIiB8IGFmdGVyOiAiIDw8IHUgPDwgZW5kbDsKCWNvdXQgPDwgIiAgUG9zdC0tIE9yZGVyOiAgIiA8PCB1IDw8ICIgLT4gIiA8PCB1LS07IGNvdXQgPDwgIiB8IGFmdGVyOiAiIDw8IHUgPDwgZW5kbDsKCWNvdXQgPDwgIisrTWl4ZWQtLSBPcmRlcjogIiA8PCB1IDw8ICIgLT4gIiA8PCArKy0tKyt1LS0rKy0tOyBjb3V0IDw8ICIgfCBhZnRlcjogIiA8PCB1IDw8IGVuZGw7Cgljb3V0IDw8IHN0cmluZygxNiwgJy0nKSA8PCBlbmRsOwp9CiAKaW50IG1haW4oKSB7CglQb2ludCB1MSgwLCAwKTsKCVBvaW50IHUyKDI3LCAyKTsKCXRlc3QodTEpOwoJdGVzdCh1Mik7CgkKCVBvaW50ZiB2MSgwLCAwKTsKCVBvaW50ZiB2MigyNy4yLCAyMC4wNCk7Cgl0ZXN0KHYxKTsKCXRlc3QodjIpOwoJCglyZXR1cm4gMDsKfQ==