https://thesobersobber.github.io/CP-Snippets/ip-overloads
template<typename T1, typename T2> inline istream& operator >> (istream& in, pair<T1,T2>& a) { in>>a.first>>a.second; return in; }
template<typename T1, typename T2> inline ostream& operator << (ostream& out, pair<T1,T2> a) { out<<a.first<<" "<<a.second; return out; }
template<typename T> istream& operator >> (istream& in, vector<T>& v) { rep(i,1,sz(v)) cin>>v[i]; return in; }
void read(auto&... args) { ((cin>>args), ...); }
void put(auto&&... args) { ((cout<<args<<" "), ...);}
#define get(T,args...) T args; read(args);
#define putn(args...) { put(args); cout<<"
"; }
#define pute(args...) { put(args); cout<<endl; }
#define putr(args...) { putn(args) return ;}