import std.algorithm, std.container, std.conv, std.math, std.range, std.typecons, std.stdio, std.string;

auto rdsp(){return readln.splitter;}
void pick(R,T)(ref R r,ref T t){t=r.front.to!T;r.popFront;}
void readV(T...)(ref T t){auto r=rdsp;foreach(ref v;t)pick(r,v);}
void readC(T...)(size_t n,ref T t){foreach(ref v;t)v=new typeof(v)(n);foreach(i;0..n){auto r=rdsp;foreach(ref v;t)pick(r,v[i]);}}

void main()
{
  int n; readV(n);
  string[] s; int[] p; readC(n, s, p);

  struct R { string s; int p, i; }
  auto r = new R[](n);
  foreach (i; 0..n) r[i] = R(s[i], p[i], i+1);

  r.sort!"a.s == b.s ? a.p > b.p : a.s < b.s";

  foreach (ri; r) writeln(ri.i);
}
