1. 注意抓住共同的规律。
  2. 两个小根堆。
  3. \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;
}