#include <iostream>
#include <variant>
#include <vector>
#include <string>

void dump(std::vector<std::variant<int, std::string>>v) {
  for (auto &e : v) {
    if (std::holds_alternative<int>(e)) {
      int &x = std::get<int>(e);
      std::cout << " " << x << std::endl;
    } else if (std::holds_alternative<std::string>(e)) {
      std::string &x = std::get<std::string>(e);
      std::cout << " " << x << std::endl;
    }
  }
}

void f(std::vector<std::variant<int, std::string>> v1, std::vector<std::variant<int, std::string>> v2) {
  std::cout << "v1:" << std::endl;
  dump(v1);
  std::cout << "v2:" << std::endl;
  dump(v2);
}

int main() {
  std::vector<std::variant<int, std::string>> v1, v2;
  v1.emplace_back(3);
  v1.emplace_back(std::string("abc"));
  v1.emplace_back(55);
  v1.emplace_back(std::string("xyz"));
  
  v2.emplace_back("abcde");
  v2.emplace_back(324);
  v2.emplace_back(551);
  v2.emplace_back(std::string("rstuvw"));
  
  f(v1, v2);

  return 0;
}
/* end */

  