#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
const int N = 200010;
int n;
char sex[N];
int w[N];
struct Data
{
int d, a, b;
bool operator< (const Data& t)const
{
if (d != t.d) return d > t.d;
return a > t.a;
}
};
priority_queue<Data> heap;
int l[N], r[N];
bool st[N];
Data get_data(int a, int b)
{
return {abs(w[a] - w[b]), a, b};
}
void remove(int k)
{
l[r[k]] = l[k];
r[l[k]] = r[k];
}
int main()
{
scanf("%d", &n);
scanf("%s", sex + 1);
for (int i = 1; i <= n; i ++ ) scanf("%d", &w[i]);
w[0] = w[n + 1] = 1e9;
for (int i = 0; i <= n + 1; i ++ ) l[i] = i - 1, r[i] = i + 1;
for (int i = 0; i <= n; i ++ ) heap.push(get_data(i, i + 1));
vector<PII> res;
while (heap.size())
{
auto t = heap.top();
heap.pop();
int a = t.a, b = t.b;
if (sex[a] == sex[b]) continue;
if (st[a] || st[b]) continue;
if (!a || b == n + 1) break;
heap.push(get_data(l[a], r[b]));
remove(a), remove(b);
st[a] = st[b] = true;
res.push_back({a, b});
}
printf("%d\n", (int)res.size());
for (auto p: res)
printf("%d %d\n", p.x, p.y);
return 0;
}
非常nice
good