#include<bits/stdc++.h>
using namespace std;
int n;
int s[100005][2];
int topp;
struct node{
bool p;
bool xb;
int last,next;
int sun;//|i-i.next|
int id;
int v;
}a[200005];
struct cmp{
bool operator()(int f1,int f2){
if (a[f1].sun!=a[f2].sun) return a[f1].sun>a[f2].sun;
return f1>f2;
}
};
priority_queue<int,vector<int>,cmp>q;
void in(){
cin>>n;
for (int i=1;i<=n;i++){
a[i].id=i;
char f;
cin>>f;
if(f=='G') a[i].xb=1;
a[i].next=i+1,a[i].last=i-1,a[i].id=i;
}
for (int i=1;i<=n;i++){
cin>>a[i].v;
if (i>=2&&a[i-1].xb!=a[i].xb){
a[i-1].sun=abs(a[i-1].v-a[i].v);
q.push(i-1);
}
}
return;
}
int main(){
in();
while (!q.empty()){
int g=q.top();
q.pop();
int g2=a[g].next;
int l=a[g].last;
int r=a[g2].next;
if (a[g].p==1||a[g2].p==1)
continue;
a[g].p=a[g2].p=1;
topp++,s[topp][0]=g,s[topp][1]=g2;
if (a[l].id>=1&&a[r].id<=n){
a[l].next=r;
a[r].last=l;
if (a[l].xb!=a[r].xb){
a[l].sun=abs(a[l].v-a[r].v);
q.push(l);
}
}
}
cout<<topp<<endl;
for (int i=1;i<=topp;i++)
cout<<s[i][0]<<" "<<s[i][1]<<endl;
return 0;
}
同学测了一下 好像会出现s[i][0]>s[i][1]