tuple<int, int, int> insert(int data, int pos) { r.insert(pos, data); auto it = r.begin() + pos; int p = prev(it); int q = next(it); return make_tuple(p, data, q); }
tuple<int, int, int> remove(int pos) { auto it = r.begin() + pos; int del = *it; int p = prev(it); int q = next(it); r.erase(pos, 1); return make_tuple(p, del, q); }
int prev(rope<int>::const_iterator it) { if (it == r.begin()) return *r.rbegin(); it--; return *it; }
int next(rope<int>::const_iterator it) { it++; if (it == r.end()) return *r.begin(); return *it; }