#pragma once
// This file is a fork of AtCoder Library.#define E6NLAQ_INTERNAL_CSR_HPP
#include<algorithm>
#include<utility>
#include<vector>namespacee6nlaq{namespaceinternal{template<classE>structcsr{std::vector<int>start;std::vector<E>elist;explicitcsr(intn,conststd::vector<std::pair<int,E>>&edges):start(n+1),elist(edges.size()){for(autoe:edges){start[e.first+1]++;}for(inti=1;i<=n;i++){start[i]+=start[i-1];}autocounter=start;for(autoe:edges){elist[counter[e.first]++]=e.second;}}};}// namespace internal}// namespace e6nlaq
#line 2 "include/e6nlaq/internal/csr.hpp"
// This file is a fork of AtCoder Library.#define E6NLAQ_INTERNAL_CSR_HPP
#include<algorithm>
#include<utility>
#include<vector>namespacee6nlaq{namespaceinternal{template<classE>structcsr{std::vector<int>start;std::vector<E>elist;explicitcsr(intn,conststd::vector<std::pair<int,E>>&edges):start(n+1),elist(edges.size()){for(autoe:edges){start[e.first+1]++;}for(inti=1;i<=n;i++){start[i]+=start[i-1];}autocounter=start;for(autoe:edges){elist[counter[e.first]++]=e.second;}}};}// namespace internal}// namespace e6nlaq