#ifndef davele
#include "grader.h"
#endif // davele
#include <bits/stdc++.h>
#define pb push_back
#define pii pair<int, int>
#define fi first
#define se second
using namespace std;
const int base = 70001, mod = 1e6+3;
mt19937_64 rng (chrono::high_resolution_clock::now().time_since_epoch().count());
int rand (int l, int r){
return uniform_int_distribution <int> (l, r) (rng);
}
set <int> let[65536];
int db[60][mod+1];
double score[60];
void excerpt (int A[]){
double alpha = 10000.0;
double beta = 10000.0;
double phi = 30000.0;
for (int i=0; i<56; i++) score[i] = 0;
for (int i=0; i<100; i++){
int v = A[i];
if (let[v].empty()) continue;
double tm = alpha/let[v].size();
for (int x:let[v]){
score[x]+=tm;
}
}
for (int i=0; i+1<100; i++){
int val = 1ll*(1ll*A[i]*base+A[i+1])%mod;
vector <pii> bonus;
int tot = 0;
for (int lang = 0; lang<56; lang++){
if (db[lang][val]>0){
int ts = db[lang][val];
tot+=ts;
bonus.pb({lang, ts});
}
}
if (bonus.empty()) continue;
double tm = beta/tot;
for (pii lang:bonus){
score[lang.fi]+=tm*lang.se;
}
}
for (int i=0; i+2<100; i++){
int val = (1ll*(1ll*(1ll*A[i]*base+A[i+1])%mod)*base+A[i+2])%mod;
vector <pii> bonus;
int tot = 0;
for (int lang = 0; lang<56; lang++){
if (db[lang][val]>0){
int ts = db[lang][val];
tot+=ts;
bonus.pb({lang, ts});
}
}
if (bonus.empty()) continue;
double tm = phi/tot;
for (pii lang:bonus){
score[lang.fi]+=tm*lang.se;
}
}
double maxi = 0;
for (int i=0; i<56; i++){
maxi = max (maxi, score[i]);
}
vector <int> candidate;
for (int i=0; i<56; i++) if (maxi==score[i]){
candidate.pb(i);
}
shuffle (candidate.begin(), candidate.end(), rng);
int ret = language(candidate[0]);
for (int i=0; i<100; i++){
int v = A[i];
let[v].insert(ret);
}
for (int i=0; i+1<100; i++){
int val = 1ll*(1ll*A[i]*base+A[i+1])%mod;
db[ret][val]++;
}
for (int i=0; i+2<100; i++){
int val = (1ll*(1ll*(1ll*A[i]*base+A[i+1])%mod)*base+A[i+2])%mod;
db[ret][val]++;
}
}
#ifdef davele
signed main(){
}
#endif // davele