- 注意抓住共同的规律。 
 - 两个小根堆。 
 - \n可以确保程序通过 
 
 #include<bits/stdc++.h>
using namespace std;
//采用大根堆,小根堆的思想
int main(){
    int T,N,M;
    cin>>T;
    string s,p;
    while(T--){
        cin>>N>>s>>M>>p;
        //小根堆,这样最小位置的索引就在最左边,还可以动态维护(仅限,为0 到 1的时候动态调整)
        priority_queue<int,vector<int>,greater<int>> seat0;
        priority_queue<int,vector<int>,greater<int>> seat1;
        for(int i =0;i< N;i++){
            if(s[i]=='0'){
                seat0.push(i+1);
            }else if(s[i]=='1'){
                seat1.push(i+1);
            }
        }
        for(int i =0;i<M;i++){
            if(p[i]=='M'){
                if(!seat1.empty()){
                    int i = seat1.top();
                    seat1.pop();
                    cout<<i<<'\n';//可以节省时间
                }else{
                    int i = seat0.top();
                    seat0.pop();
                    //然后做一个位置
                    seat1.push(i);
                    cout<<i<<'\n';//可以节省时间
                }
            }else{
                if(!seat0.empty()){
                    int i = seat0.top();
                    seat0.pop();
                    //然后做一个位置
                    seat1.push(i);
                    cout<<i<<'\n';//可以节省时间
                }else{
                    int i = seat1.top();
                    seat1.pop();
                    cout<<i<<'\n';//可以节省时间
                }
            }
        }
    }
    return 0;
}