#pragma once

#include <iostream>
#include <limits>
#include <tuple>
#include <vector>

/**
 *   Represent a pair (pickup/delivery) position in a solution.
 *   (Route Index, Pickup Position, Delivery Position).
 *   Used in insertion/deletion modifications.
 */
using Index = std::tuple<int, int, int>;

/**
 *  A point in time or a duration.
 */
using TimeInteger = double;
TimeInteger constexpr UNDEF_TIMESTAMP = std::numeric_limits<TimeInteger>::max();


using Matrix = std::vector<std::vector<double>>;