如题;
#include<bits/stdc++.h>
#define ll long long
using namespace std;
string s,command;
ll n;
ll res;
bool flag=true;
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>s;
cin>>n;
string sp=s+s+s,sr=s;
s=sp;
ll l=sr.size(),r=l+sr.size()-1;//记录原字符串,并将原字符串拼接三次,以后向左/右循环时直接移动l,r即可
while(n--) {
cin>>command;
if(command=="rev") {//如果是翻转操作的话,求更改标记。
flag=!flag;
continue;
}
cin>>res;
if(flag==false) {
if(command==">")command="<";//根据标记更改方向
else command=">";
}
ll mv=(command==">"?-1:1);//方向
res%=sr.size();//如果循环字符串的数量次数,就可以省略
if(mv==-1) {
if(l+res*mv<0)s=sr+s,l+=sr.size(),r+=sr.size();//如果超过现有长度,就在前/后增加原字符串
}
if(mv==1) {
if(r+res*mv>s.size())s=s+sr;
}
l+=mv*res,r+=mv*res;//l,r风别移动
}
if(flag) {//反向输出/正向输出
for(ll i=l; i<=r; i++) {
cout<<s[i];
}
} else {
for(ll i=r; i>=l; i--) {
cout<<s[i];
}
}
return 0;
}