#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <list>
using namespace std;
int main() {
int N, Q;
cin >> N >> Q;
vector<int>tab(N);
int x;
for (auto it = tab.begin(); it != tab.end(); it++)
{
cin >> x;
*it = x;
}
while (Q--)
{
int a, b;
cin >> x >> a >> b;
int l = (b - a) + 1;
vector<int>temp(l);
copy(tab.begin() + a - 1, tab.begin() + b, temp.begin());
if (x == 1)
{
if (l >= a)
{
copy(tab.begin(), tab.begin() + a - 1, tab.begin()+l);
copy(temp.begin(), temp.end(), tab.begin());
}
else
{
vector<int>bufor(a - 1);
copy(tab.begin(), tab.begin() + a - 1, bufor.begin());
copy(bufor.begin(), bufor.end(), tab.begin() + l);
copy(temp.begin(), temp.end(), tab.begin());
}
}
else
{
tab.erase(tab.begin() + a - 1, tab.begin() + b);
tab.insert(tab.end(), temp.begin(), temp.end());
}
}
cout << abs(tab[0] - tab[N - 1]) << endl;
for (auto it = tab.begin(); it != tab.end(); it++)
cout << *it << " ";
return 0;
return 0;
}
I2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxsaXN0Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmludCBtYWluKCkgewoJaW50IE4sIFE7CgljaW4gPj4gTiA+PiBROwoJdmVjdG9yPGludD50YWIoTik7CglpbnQgeDsKCWZvciAoYXV0byBpdCA9IHRhYi5iZWdpbigpOyBpdCAhPSB0YWIuZW5kKCk7IGl0KyspCgl7CgkJY2luID4+IHg7CgkJKml0ID0geDsKCX0KCXdoaWxlIChRLS0pCgl7CgkJaW50IGEsIGI7CgkJY2luID4+IHggPj4gYSA+PiBiOwoJCWludCBsID0gKGIgLSBhKSArIDE7CgkJdmVjdG9yPGludD50ZW1wKGwpOwoJCWNvcHkodGFiLmJlZ2luKCkgKyBhIC0gMSwgdGFiLmJlZ2luKCkgKyBiLCB0ZW1wLmJlZ2luKCkpOwoJCQoJCWlmICh4ID09IDEpCgkJewoJCQlpZiAobCA+PSBhKQoJCQl7CgkJCQljb3B5KHRhYi5iZWdpbigpLCB0YWIuYmVnaW4oKSArIGEgLSAxLCB0YWIuYmVnaW4oKStsKTsKCQkJCWNvcHkodGVtcC5iZWdpbigpLCB0ZW1wLmVuZCgpLCB0YWIuYmVnaW4oKSk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQl2ZWN0b3I8aW50PmJ1Zm9yKGEgLSAxKTsKCQkJCWNvcHkodGFiLmJlZ2luKCksIHRhYi5iZWdpbigpICsgYSAtIDEsIGJ1Zm9yLmJlZ2luKCkpOwoJCQkJY29weShidWZvci5iZWdpbigpLCBidWZvci5lbmQoKSwgdGFiLmJlZ2luKCkgKyBsKTsKCQkJCWNvcHkodGVtcC5iZWdpbigpLCB0ZW1wLmVuZCgpLCB0YWIuYmVnaW4oKSk7CgkJCX0KCQkJCgkJfQoJCWVsc2UKCQl7CgkJCXRhYi5lcmFzZSh0YWIuYmVnaW4oKSArIGEgLSAxLCB0YWIuYmVnaW4oKSArIGIpOwoJCQl0YWIuaW5zZXJ0KHRhYi5lbmQoKSwgdGVtcC5iZWdpbigpLCB0ZW1wLmVuZCgpKTsKCQl9CgoJfQoJY291dCA8PCBhYnModGFiWzBdIC0gdGFiW04gLSAxXSkgPDwgZW5kbDsKCWZvciAoYXV0byBpdCA9IHRhYi5iZWdpbigpOyBpdCAhPSB0YWIuZW5kKCk7IGl0KyspCgkJY291dCA8PCAqaXQgPDwgIiAiOwoJcmV0dXJuIDA7CglyZXR1cm4gMDsKfQ==