#include <bits/stdc++.h>
using namespace std;
struct rec {
pair<string, string> re; //记录
int times;//错误次数
};
rec Q[200];//储存八条我们要选择出来的记录
int front = 0; //我们要选择出来的记录的开头
int Q_size = 0; //我们目前选择出来的记录
int main() {
string s;
vector<rec> r;//储存迄今为止所有记录(重复就没必要记录)
while (getline(cin, s)) { //循环输入每条记录
rec one;
int pos1, pos2; //找到最后一个\和空格所在位置
for (int i = 0; i < s.length(); i++) {
if (s[i] == '\\') pos1 = i;
if (s[i] == ' ') pos2 = i;
}
string name, cows; //存储文件名和行号
name = s.substr(pos1 + 1, pos2 - pos1 - 1);
if (name.length() > 16) name = name.substr(name.length() - 16); //取后面16个
cows = s.substr(pos2 + 1);
one.re.first = name;
one.re.second = cows;
one.times = 1;
bool isrepeate = 0;
//看看队列里面有没有重复的,如果有,错误次数+1,不需要继续操作了
for (int i = front; i < front + Q_size; i++) {
if (Q[i].re == one.re) {
Q[i].times++;
isrepeate = 1; //和队列的重复
}
}
if (isrepeate == 1) continue;
//看看和曾经出现的记录有没有重复的,如果有,不用管,因为已经被队列淘汰,也是不需要继续操作了
bool isrepeate2 = 0;
if (isrepeate == 0) {
for (int i = 0; i < r.size(); i++) {
if (r[i].re == one.re) {
isrepeate2 = 1; //和曾经出现过,又已经被队列淘汰的重复
break;
}
}
}
if (isrepeate2 == 1) continue;;
//如果既不和队列中已经有的记录冲突,也不和曾经输入过的记录冲突,那么将其入队
if (isrepeate == 0) {
if (Q_size == 8) { //如果队满了,出队一个
front++;
Q_size--;
}
Q[front + Q_size] = one;
Q_size++;
}
r.push_back(
one);//所有记录应该保存在r中(重复的已经在之前被剔除)
}
//输出结果
for (int i = front; i < front + Q_size;
i++) cout << Q[i].re.first << " " << Q[i].re.second << " " << Q[i].times <<
endl;
}
// 64 位输出请用 printf("%lld")