#include <iostream>
#include<string>
using namespace std;

int main() {
    int n, q, l, r;
    cin >> n >> q;
    string str;
    cin >> str;
    while (q--) {
        cin >> l >> r;

        for (int i = l-1, j = 0; i < r; i++, j++) {
            str.insert(i+j, 1, str[i+j]);//从str[l-1]开始,每次偏移1位为下一次插入
        }
    }
    cout << str;
}
// 64 位输出请用 printf("%lld")
/*
#include <iostream>
#include<string>
using namespace std;

int main() {
    int n,q,l,r;
    cin>>n>>q;
    string str;
    cin>>str;
    while(q--){
        cin>>l>>r;
        string a;
        a+=str[l-1];
        for(int i=l;i<r-1;i++){
            a+=str[i];
            a+=str[i];
        }a+=str[r-1];
        string strl(str,0,l),strr(str,r-1,str.size()-r+1);
        //cout<<"strl="<<strl<<" strr="<<strr<<endl;
        //cout<<"str="<<str<<" a="<<a<<endl;
        str=strl+a+strr;
        //cout<<str<<endl;
    }
    cout<<str;
}
*/

这次是第二版,第一次写的时候直接用string的拼接,但是会用很多内存和字符串拷贝,这次搞insert,可以提前申请空间够,然后insert就不需要移动,每次就o(r-l)好了,总和大概是o(q^(r-l))