#include <bits/stdc++.h>
using namespace std;
using ld = long double;
#define right giorgme
int language(int x);
namespace k1r1t0 {
const int L = 100;
const int K = 56;
const int V = 65535;
const int B = 512;
int mp1[K][B], mp2[K][B], cc1[B], cc2[B], vv[B];
int go[V];
bool was = false;
ld dist(int a[], int b[]) {
int sa = 0, sb = 0;
for (int i = 0; i < B; i++) {
sa += a[i];
sb += b[i];
}
ld dist = 0;
for (int x = 0; x < B; x++) {
ld p1 = 1.0l * a[x] / sa;
ld p2 = 1.0l * b[x] / sb;
ld diff = abs(p1 - p2);
dist += diff;
}
return dist;
}
ld sim(int a[], int b[]) {
ld dist = 0;
for (int i = 0; i < B; i++)
if (a[i] > 0 && b[i] > 0)
dist--;
return dist / B;
}
void init() {
if (was) return;
for (int i = 0; i < V; i++)
go[i] = rand() % B;
was = true;
}
void excerpt(int e[]) {
init();
for (int i = 0; i < L; i++)
e[i] = go[e[i] - 1];
for (int i = 0; i < B; i++)
cc1[i] = cc2[i] = 0;
for (int i = 0; i < L; i++)
cc1[e[i]]++;
for (int i = 0; i + 1 < L; i++)
cc2[(e[i] + (e[i + 1] ^ 47)) % B]++;
pair<ld, int> opt = {1e18, 0};
for (int i = 0; i < K; i++) {
ld cur = 0;
cur += 1.0l * dist(cc1, mp1[i]);
cur += 2.2l * dist(cc2, mp2[i]);
cur += 50.0l * sim(cc1, mp1[i]);
cur += 10.0l * sim(cc2, mp2[i]);
opt = min(opt, {cur, i});
}
int f = language(opt.second);
for (int i = 0; i < B; i++) {
mp1[f][i] += cc1[i];
mp2[f][i] += cc2[i];
}
}
}
void excerpt(int e[]) {
k1r1t0::excerpt(e);
}
#ifdef LOCAL
#define N 100
static char lang[20], lan[100][20];
static int lnum, i, n, nl, uni[N], right, tot;
static int called = 0;
int language(int L) {
if (called) {
printf("Duplicate language call\n");
exit(0);
}
if (L < 0 || L >= 56) {
printf("Invalid language code: %d\n", L);
exit(0);
}
called = 1;
right += (L == lnum);
tot++;
return lnum;
}
int main() {
freopen("input (2).txt", "r", stdin);
for (n = 0; 1 == scanf("%s", lang); n++) {
if (n % 1000 == 0)
cout << n << endl;
if (!strcmp(lang, "??"))
break;
for (i = 0; i < nl && strcmp(lang, lan[i]); i++) {
}
strcpy(lan[i], lang);
if (i == nl) {
nl++;
}
lnum = i;
for (i = 0; i < N; i++)
scanf("%d,", &uni[i]);
scanf("%*[^\n]");
called = 0;
excerpt(uni);
if (!called) {
printf("NO language call\n");
exit(0);
}
}
printf("OK\n%0.2lf\n", 110.0 * right / tot);
return 0;
}
#endif