#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
template<class T>
class myvector {
private:
// capacity of array
int capacity;
// size in array
int size;
T *arr;
public:
myvector() {
capacity = 10;
arr = new T[10];
size = 0;
}
int get_length() {
return size;
}
void expand() {
capacity *= 2;
T *newarr = new int[capacity];
for (int i = 0; i < size; i++) {
newarr[i] = arr[i];
}
delete[]arr;
arr = newarr;
}
void append(int val) {
if (size == capacity) {
expand();
}
arr[size] = val;
size++;
}
T at(int idx) {
if (idx < size && idx >= 0) {
return arr[idx];
}
//cout << "nu such index";
throw invalid_argument("no such index");
}
void deleteat(int idx) {
if (idx < size && idx >= 0) {
for (int i = idx; i + 1 < size; i++) {
arr[i] = arr[i + 1];
}
size--;
return;
}
throw invalid_argument("no such index");
}
void insertat(int idx, T val) {
if (idx <= size && idx >= 0) {
if (size == capacity) {
expand();
}
for (int i = size; i > idx; i--) {
arr[i] = arr[i - 1];
}
arr[idx] = val;
size += 1;
return;
}
throw invalid_argument("you can't insert here");
}
void print() {
for (int i = 0; i < size; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
void clear() {
delete[]arr;
size = 0;
capacity = 5;
arr = new int[5];
}
~ myvector() {
delete[] arr;
}
};
int main() {
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgTiA9IDFlNiArIDU7CgoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgbXl2ZWN0b3Igewpwcml2YXRlOgogICAgLy8gY2FwYWNpdHkgb2YgYXJyYXkKICAgIGludCBjYXBhY2l0eTsKICAgIC8vIHNpemUgaW4gYXJyYXkKICAgIGludCBzaXplOwogICAgVCAqYXJyOwpwdWJsaWM6CiAgICBteXZlY3RvcigpIHsKICAgICAgICBjYXBhY2l0eSA9IDEwOwogICAgICAgIGFyciA9IG5ldyBUWzEwXTsKICAgICAgICBzaXplID0gMDsKICAgIH0KCiAgICBpbnQgZ2V0X2xlbmd0aCgpIHsKICAgICAgICByZXR1cm4gc2l6ZTsKICAgIH0KCiAgICB2b2lkIGV4cGFuZCgpIHsKICAgICAgICBjYXBhY2l0eSAqPSAyOwogICAgICAgIFQgKm5ld2FyciA9IG5ldyBpbnRbY2FwYWNpdHldOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgIG5ld2FycltpXSA9IGFycltpXTsKICAgICAgICB9CiAgICAgICAgZGVsZXRlW11hcnI7CiAgICAgICAgYXJyID0gbmV3YXJyOwogICAgfQoKICAgIHZvaWQgYXBwZW5kKGludCB2YWwpIHsKICAgICAgICBpZiAoc2l6ZSA9PSBjYXBhY2l0eSkgewogICAgICAgICAgICBleHBhbmQoKTsKICAgICAgICB9CiAgICAgICAgYXJyW3NpemVdID0gdmFsOwogICAgICAgIHNpemUrKzsKICAgIH0KCiAgICBUIGF0KGludCBpZHgpIHsKICAgICAgICBpZiAoaWR4IDwgc2l6ZSAmJiBpZHggPj0gMCkgewogICAgICAgICAgICByZXR1cm4gYXJyW2lkeF07CiAgICAgICAgfQogICAgICAgIC8vY291dCA8PCAibnUgc3VjaCBpbmRleCI7CiAgICAgICAgdGhyb3cgaW52YWxpZF9hcmd1bWVudCgibm8gc3VjaCBpbmRleCIpOwogICAgfQoKICAgIHZvaWQgZGVsZXRlYXQoaW50IGlkeCkgewogICAgICAgIGlmIChpZHggPCBzaXplICYmIGlkeCA+PSAwKSB7CiAgICAgICAgICAgIGZvciAoaW50IGkgPSBpZHg7IGkgKyAxIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICAgICBhcnJbaV0gPSBhcnJbaSArIDFdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNpemUtLTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aHJvdyBpbnZhbGlkX2FyZ3VtZW50KCJubyBzdWNoIGluZGV4Iik7CiAgICB9CgogICAgdm9pZCBpbnNlcnRhdChpbnQgaWR4LCBUIHZhbCkgewogICAgICAgIGlmIChpZHggPD0gc2l6ZSAmJiBpZHggPj0gMCkgewogICAgICAgICAgICBpZiAoc2l6ZSA9PSBjYXBhY2l0eSkgewogICAgICAgICAgICAgICAgZXhwYW5kKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yIChpbnQgaSA9IHNpemU7IGkgPiBpZHg7IGktLSkgewogICAgICAgICAgICAgICAgYXJyW2ldID0gYXJyW2kgLSAxXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhcnJbaWR4XSA9IHZhbDsKICAgICAgICAgICAgc2l6ZSArPSAxOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRocm93IGludmFsaWRfYXJndW1lbnQoInlvdSBjYW4ndCBpbnNlcnQgaGVyZSIpOwogICAgfQoKICAgIHZvaWQgcHJpbnQoKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgICAgY291dCA8PCBhcnJbaV0gPDwgIiAiOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICB9CgogICAgdm9pZCBjbGVhcigpIHsKICAgICAgICBkZWxldGVbXWFycjsKICAgICAgICBzaXplID0gMDsKICAgICAgICBjYXBhY2l0eSA9IDU7CiAgICAgICAgYXJyID0gbmV3IGludFs1XTsKICAgIH0KCiAgICB+IG15dmVjdG9yKCkgewogICAgICAgIGRlbGV0ZVtdIGFycjsKICAgIH0KfTsKCgppbnQgbWFpbigpIHsKICAgIAp9