#include <bits/stdc++.h>
using namespace std;
const int maxn = 2010;
struct Point {
  long long x, y;
  int id;
  Point(int _x = 0, int _y = 0, int _id = 0) : x(_x), y(_y), id(_id) {}
  void read(int i) {
    id = i;
    scanf("%lld%lld", &x, &y);
  }
} ps[maxn];
Point operator-(Point a, Point b) { return Point(a.x - b.x, a.y - b.y); }
long long cross(Point a, Point b) { return a.x * b.y - a.y * b.x; }
Point base;
bool cmp(Point a, Point b) { return cross(a - base, b - base) > 0; }
char s[maxn];
int vis[maxn], ans[maxn];
Point t[maxn];
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    ps[i].read(i);
  }
  Point start = ps[1];
  for (int i = 2; i <= n; i++) {
    if (ps[i].y < start.y) start = ps[i];
  }
  ans[1] = start.id;
  vis[start.id] = 1;
  base = start;
  scanf("%s", s + 1);
  for (int i = 2; i < n; i++) {
    int cnt = 0;
    for (int j = 1; j <= n; j++)
      if (!vis[j]) t[cnt++] = ps[j];
    sort(t, t + cnt, cmp);
    if (s[i - 1] == 'L') {
      ans[i] = t[0].id;
      vis[t[0].id] = 1;
      base = t[0];
    } else {
      ans[i] = t[cnt - 1].id;
      vis[t[cnt - 1].id] = 1;
      base = t[cnt - 1];
    }
  }
  for (int i = 1; i <= n; i++)
    if (!vis[i]) ans[n] = i;
  for (int i = 1; i <= n; i++) printf("%d ", ans[i]);
  printf("\n");
  return 0;
}
