#include <iostream>
#include <list>
using namespace std;
class D {
typedef list<int> L;
L* result;
L::iterator ptr;
public:
D() : result(0) {}
~D() { delete result; }
void make_result () {
result = new L;
for (int i=0; i < 5; ++ i)
result->push_back (i);
ptr = result->begin();
}
void prev () {
if (result == 0) return;
if (ptr == result->begin()) ptr = result->end ();
--ptr;
}
void next () {
if (result == 0) return;
if (++ptr == result->end()) ptr = result->begin ();
}
void display () {
if (result == 0) return;
cout << *ptr << ' ';
}
};
int main () {
D d;
d.display (); // output nothing
cout << endl;
d.make_result();
for (int i=0; i < 10; ++i) {
d.next();
d.display();
}
cout << endl;
for (int i=0; i < 10; ++i) {
d.prev();
d.display();
}
cout << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGlzdD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEQgewogdHlwZWRlZiBsaXN0PGludD4gTDsKIEwqIHJlc3VsdDsKIEw6Oml0ZXJhdG9yIHB0cjsKIHB1YmxpYzoKICAgRCgpIDogcmVzdWx0KDApIHt9CiAgIH5EKCkgeyBkZWxldGUgcmVzdWx0OyB9CgogICB2b2lkIG1ha2VfcmVzdWx0ICgpIHsKICAgICByZXN1bHQgPSBuZXcgTDsKICAgICBmb3IgKGludCBpPTA7IGkgPCA1OyArKyBpKQogICAgICAgIHJlc3VsdC0+cHVzaF9iYWNrIChpKTsKICAgICBwdHIgPSByZXN1bHQtPmJlZ2luKCk7CiAgIH0KCiAgIHZvaWQgcHJldiAoKSB7IAogICAgICBpZiAocmVzdWx0ID09IDApIHJldHVybjsKICAgICAgaWYgKHB0ciA9PSByZXN1bHQtPmJlZ2luKCkpIHB0ciA9IHJlc3VsdC0+ZW5kICgpOyAKICAgICAgLS1wdHI7IAogICB9CgogICB2b2lkIG5leHQgKCkgeyAKICAgICAgaWYgKHJlc3VsdCA9PSAwKSByZXR1cm47CiAgICAgIGlmICgrK3B0ciA9PSByZXN1bHQtPmVuZCgpKSBwdHIgPSByZXN1bHQtPmJlZ2luICgpOyAKICAgfQogICB2b2lkIGRpc3BsYXkgKCkgewogICAgICBpZiAocmVzdWx0ID09IDApIHJldHVybjsKICAgICAgY291dCA8PCAqcHRyIDw8ICcgJzsKICAgfQp9OwoKaW50IG1haW4gKCkgewogIEQgZDsKICBkLmRpc3BsYXkgKCk7IC8vIG91dHB1dCBub3RoaW5nCiAgY291dCA8PCBlbmRsOwoKICBkLm1ha2VfcmVzdWx0KCk7CiAgZm9yIChpbnQgaT0wOyBpIDwgMTA7ICsraSkgewogICAgZC5uZXh0KCk7CiAgICBkLmRpc3BsYXkoKTsKICB9CiAgY291dCA8PCBlbmRsOwoKICBmb3IgKGludCBpPTA7IGkgPCAxMDsgKytpKSB7CiAgICBkLnByZXYoKTsKICAgIGQuZGlzcGxheSgpOwogIH0KICBjb3V0IDw8IGVuZGw7Cn0=