#include <iostream>
using namespace std;

int main() {
	// your code goes here
	return 0;
}

template <class ED>
struct EdgeData {
    EdgeData(int indexTo, const ED& edgeData) : indexTo(indexTo), edgeData(edgeData) {}
    EdgeData(int indexTo, ED&& edgeData) : indexTo(indexTo), edgeData(move(edgeData)) {}
    bool operator<(const EdgeData<ED>& other) { return indexTo < other.indexTo; }
    int indexTo;
    ED edgeData;
};
/*
template <class ED>
struct EdgeData {
    EdgeData(int indexTo, const ED& edgeData) : indexTo(indexTo), edgeData(edgeData) {}
    EdgeData(int indexTo, ED&& edgeData) : indexTo(indexTo), edgeData(move(edgeData)) {}
    int indexTo;
    ED edgeData;
};
template <class ED>
bool operator<(const EdgeData<ED>& l, const EdgeData<ED>& r) { return l.indexTo < r.indexTo; }*/