1 #include<cstdio>
2 #include<cstdlib>
3 #include<algorithm>
4 #include<iostream>
5 #include<vector>
6
7 using namespace std;
8
9 struct node
10 {
11 char sex;int val,l,r,exi;
12 }pdf[200001];
13
14 struct sb
15 {
16 int l,r,val;
17 }ergo[200001],solu[200001];
18
19 char sex[200001];int p=0,n;
20
21 bool cmp(sb a,sb b)
22 {
23 if(a.val==b.val) return a.l>b.l;
24 else return a.val>b.val;
25 }
26
27 inline void del(int i)
28 {
29 if(pdf[i].l>=0) pdf[pdf[i].l].r=pdf[i].r;
30 if(pdf[i].r<=n-1) pdf[pdf[i].r].l=pdf[i].l;
31 pdf[i].exi=0;
32 }
33
34 int main()
35 {
36 freopen("DancingLessons.in","r",stdin);
37 freopen("DancingLessons.out","w",stdout);
38
39 scanf("%d",&n);
40 scanf("%s",sex);
41 for(int i=0;i<n;i++) pdf[i].sex=sex[i];
42
43 for(int i=0;i<n;i++)
44 {
45 int tmp;
46 scanf("%d",&tmp);
47 pdf[i].l=i-1;
48 pdf[i].r=i+1;
49 pdf[i].exi=1;
50 pdf[i].val=tmp;
51
52 if(i!=0&&pdf[i].sex!=pdf[i-1].sex)
53 {
54 ergo[++p].val=abs(pdf[i].val-pdf[i-1].val);
55 ergo[p].l=i-1,ergo[p].r=i;
56 }
57 }
58 make_heap(&ergo[1],&ergo[p+1],cmp);
59
60 int sol=0;
61 while(p>=1)
62 {
63 sb k=ergo[1],k2;
64 while((!(pdf[k.l].exi&&pdf[k.r].exi))&&p>=1) pop_heap(&ergo[1],&ergo[p+1],cmp),p--,k=ergo[1];
65 if(p==0) break;
66
67 solu[++sol]=k;
68 if(pdf[k.l].l>=0&&pdf[k.r].r<=n-1)
69 if(pdf[pdf[k.l].l].sex!=pdf[pdf[k.r].r].sex)
70 {
71 k2.l=pdf[k.l].l;k2.r=pdf[k.r].r;
72 k2.val=abs(pdf[pdf[k.l].l].val-pdf[pdf[k.r].r].val);
73
74 ergo[p+1]=k2;
75 push_heap(&ergo[1],&ergo[p+2],cmp);p++;
76 }
77
78 del(k.l);del(k.r);
79 }
80
81 printf("%d\n",sol);
82 for(int i=1;i<=sol;i++)
83 printf("%d %d\n",solu[i].l+1,solu[i].r+1);
84
85 return 0;
86 }