#pragma once
#include <bits/stdc++.h>
usingnamespacestd;template<typenameT>structCompress{private:intn;vector<T>A;map<T,int>val_to_id;public:Compress(constvector<T>&_A):A(_A){sort(A.begin(),A.end());A.erase(unique(A.begin(),A.end()),A.end());n=(int)A.size();for(inti=0;i<n;i++)val_to_id[A[i]]=i;}intoperator()(Tval){returnval_to_id[val];}Toperator[](intid){returnA[id];}intsize(){returnn;}};