#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>
#include <climits>
#include <iomanip>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <unordered_map>
#include <list>
#include <set>
#include <unordered_set>
#include <bitset>
#include <typeinfo>
using namespace std;
// P.Moriarty //
#define Moriary ios_base::sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr);
using ll = long long;
long long fac(int n)
{
long long fact = 1;
for (int i = 1;i <= n;i++)
{
fact *= i;
}
return fact;
}
long long per(int n, int j)
{
long long p = 1;
for (int i = n; i > n - j; i--)
{
p *= i;
}
return p;
}
bool lucky(int ch)
{
bool l = true;
while (ch > 0)
{
int d = ch % 10;
if (d == 7 || d == 4)
{
ch /= 10;
}
else
{
l = false;
break;
}
}
return l;
}
long long pro(long long i)
{
long long r = 1;
for (int j = 1;j <= i;j++)
{
r *= 10;
}
return r;
}
bool prime(int x) {
if (x <= 1) return false;
if (x == 2 || x == 3) return true;
if (x % 2 == 0 || x % 3 == 0) return false;
for (int i = 5; i <= sqrt(x); i += 6) {
if (x % i == 0 || x % (i + 2) == 0) return false;
}
return true;
}
int f(string a, string b)
{
int c = 0;
for (int i = 0;i < a.size();i++)
{
if (a[i] == b[i])
c++;
}
return c;
}
string bit_2(int x)
{
string r;
while (x != 0)
{
if (x % 2 == 0)
r += '0';
else
r += '1';
x /= 2;
}
return r;
}
int digit_sum(int n)
{
int sum = 0;
while (n > 0) {
sum += n % 10;
n /= 10;
}
return sum;
}
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
bool BIN(vector<int>& a, int x)
{
int l = 0, r = a.size() - 1;
while (l <= r) {
int mid = (l + r) / 2;
if (a[mid] == x)
return true;
else
if (a[mid] < x) l = mid + 1;
else r = mid - 1;
}
return false;
}
bool countbits(int a)
{
int x = a;
int count = 0;
bool ch = true;
while (x)
{
for (int i = 60; i >= 0; --i)
{
if (((x >> i) & 1) == 0)
count++;
if (count > 1)
{
break;
ch = false;
}
}
}
return ch;
}
int ones_up_to(int x, int b) {
if (x < 0) return 0;
int cycle = 1 << (b + 1);
int full_cycles = (x + 1) / cycle;
int rem = (x + 1) % cycle;
int ones = full_cycles * (1 << b);
ones += max(0, rem - (1 << b));
return ones;
}
string solve(int l, int r)
{
int a = l ^ r;
string ans;
while (a)
{
if (a & 1)
{
ans += "0";
}
else
ans += "1";
a >>= 1;
}
return ans;
}
bool check_palindrom(string s)
{
string t = s;
reverse(t.begin(), t.end());
return s == t;
}
bool check_order(string s)
{
for (int i = 1; i < s.size(); i++)
{
if (s[i] < s[i - 1]) return false;
}
return true;
}
int main()
{
Moriary;
int t;
cin >> t;
int r = t;
map<string, float >m;
while (t--)
{
int n;
cin >> n;
float point = 1000.0;
for (int i = 0;i < n;i++)
{
string s;
cin >> s;
m[s] += point;
point *= 0.9;
}
}
vector<pair<float, string>>arr;
for (auto p : m)
{
arr.push_back({ p.second, p.first });
}
sort(arr.begin(), arr.end(), [](const pair<float, string>& a, const pair<float, string>& b) {
if (a.first != b.first)
return a.first > b.first;
return a.second < b.second;
});
for (int i = 0;i < arr.size();i++)
{
if (i == 0)
{
cout << arr[i].second<<endl;
}
int v = int(arr[i].first);
if (arr[i].first - v >= 0.5)
v++;
cout << arr[i].second<<" "<< v << endl;
}
}