import java.util.*;
public class DN08_63230317 {
static class Ulomek implements Comparable<Ulomek> {
private int števec;
private int imenovalec;
public Ulomek (int števec, int imenovalec) {
this.števec = števec;
this.imenovalec = imenovalec;
int gcd = this.gcd();
this.števec /= gcd;
this.imenovalec /= gcd;
}
private int celiDel () {
return this.števec/this.imenovalec;
}
private int gcd () {
return this.gcd(this.števec, this.imenovalec);
}
private static int gcd (int a, int b) {
if (b == 0)
return a;
return gcd(b, a%b);
}
public String toString () {
if (this.števec/this.gcd()-this.celiDel()*(this.imenovalec/this.gcd()) == 0)
return String.format("%d", this.celiDel());
return String.format("%d+%d/%d", this.celiDel(), this.števec/this.gcd()-this.celiDel()*(this.imenovalec/this.gcd()), this.imenovalec/this.gcd());
}
public Ulomek vsota (Ulomek a) {
return new Ulomek(this.števec*a.imenovalec+this.imenovalec*a.števec, this.imenovalec*a.imenovalec);
}
public Ulomek negacija () {
return new Ulomek(-this.števec, this.imenovalec);
}
public Ulomek produkt (Ulomek a) {
return new Ulomek(this.števec*a.števec, this.imenovalec*a.imenovalec);
}
public Ulomek obrat () {
return new Ulomek(this.imenovalec, this.števec);
}
@Override
public int compareTo (Ulomek b) {
return Integer.compare(this.števec*b.imenovalec, b.števec*this.imenovalec);
}
}
interface TočkeDela {
public Ulomek točk();
}
static class PrimerjalnikDel implements Comparator<Delo> {
@Override
public int compare (Delo prvi, Delo drugi) {
if (prvi.točk().compareTo(drugi.točk()) == 0)
return Integer.compare(drugi.vrstni_red, prvi.vrstni_red);
return prvi.točk().compareTo(drugi.točk());
}
}
abstract static class Delo implements TočkeDela {
String[] avtorji;
String naslov;
int vrstni_red;
Delo (Scanner sc, String jaz, int vrstni_red) {
this.vrstni_red = vrstni_red;
int avtorjev = sc.nextInt();
this.avtorji = new String[avtorjev];
for (int i = 0; i < avtorjev; i++) {
this.avtorji[i] = sc.next();
if (this.avtorji[i].equals("#"))
this.avtorji[i] = jaz;
}
this.naslov = sc.next();
}
}
private static class Monografija extends Delo {
String založba;
int leto;
String isbn;
public Monografija (Scanner sc, String jaz, int i) {
super(sc, jaz, i);
this.založba = sc.next();
this.leto = sc.nextInt();
this.isbn = sc.next();
}
public String toString () {
return String.format("%s: %s. %s %d, ISBN %s | %s", String.join(", ", Arrays.asList(avtorji)), naslov, založba, leto, isbn, točk().toString());
}
@Override
public Ulomek točk () {
return new Ulomek(10, 1).produkt(new Ulomek(avtorji.length, 1).obrat());
}
}
private static class Referat extends Delo {
boolean mednarodni;
String konferenca;
int začetna;
int končna;
public Referat (Scanner sc, String jaz, int i) {
super(sc, jaz, i);
this.konferenca = sc.next();
this.mednarodni = sc.nextBoolean();
this.začetna = sc.nextInt();
this.končna = sc.nextInt();
}
public String toString() {
return String.format("%s: %s. %s: %d-%d | %s", String.join(", ", Arrays.asList(avtorji)), naslov, konferenca, začetna, končna, točk().toString());
}
@Override
public Ulomek točk () {
Ulomek r = new Ulomek(1, 1);
if (this.mednarodni)
r = new Ulomek(3, 1);
return r.produkt(new Ulomek(avtorji.length, 1).obrat());
}
}
private static class Članek extends Delo {
int mestoRevije;
int številoRevij;
String revija;
int letnik;
int številka;
int leto;
int začetna;
int končna;
public Članek (Scanner sc, String jaz, int i) {
super(sc, jaz, i);
this.revija = sc.next();
this.letnik = sc.nextInt();
this.številka = sc.nextInt();
this.leto = sc.nextInt();
this.mestoRevije = sc.nextInt();
this.številoRevij = sc.nextInt();
this.začetna = sc.nextInt();
this.končna = sc.nextInt();
}
Ulomek impact () {
return new Ulomek(this.mestoRevije, this.številoRevij);
}
int kvartil () {
if (this.impact().compareTo(new Ulomek(1, 4)) != 1)
return 1;
if (this.impact().compareTo(new Ulomek(1, 2)) != 1)
return 2;
if (this.impact().compareTo(new Ulomek(3, 4)) != 1)
return 3;
if (this.impact().compareTo(new Ulomek(1, 1)) != 1)
return 4;
return 5;
}
public String toString () {
return String.format("%s: %s. %s %d(%d): %d-%d (%d) | %s", String.join(", ", Arrays.asList(avtorji)), naslov, revija, letnik, številka, začetna, končna, leto, točk().toString());
}
@Override
public Ulomek točk () {
Ulomek[] osnove = {null, new Ulomek(10, 1), new Ulomek(8, 1), new Ulomek(6, 1), new Ulomek(4, 1), new Ulomek(2, 1)};
return osnove[kvartil()].produkt(new Ulomek(avtorji.length, 1).obrat());
}
}
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
String jaz = sc.next();
int vnosov = sc.nextInt();
Delo[] dela = new Delo[vnosov];
for (int i = 0; i < vnosov; i++) {
String vrsta = sc.next();
switch (vrsta) {
case "monografija":
dela[i] = new Monografija(sc, jaz, i);
break;
case "referat":
dela[i] = new Referat(sc, jaz, i);
break;
case "clanek":
dela[i] = new Članek(sc, jaz, i);
break;
}
}
Arrays.sort(dela, new PrimerjalnikDel());
for (int i = dela.length-1; i >= 0; i--)
System.out.println(dela[i].toString());
}
}