#include<iostream>
#include<string>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>

// Die cond Funktion ist ein Makro
#define cond(a,b,c) ( (a) ? (b) : (c) )

// Drucke das Argument und gebe es zurueck
template<typename T>
T print (T x) 
{
  std::cout.precision(16);
  std::cout << x << std::endl;
  return x;
}

// Drucke Argument 1 und gebe das letzte Argument zurueck
template<typename T1, typename T2>
T2 print (T1 x1, T2 x2) 
{
  std::cout.precision(16);
  std::cout << x1 << std::endl;
  return x2;
}

// Drucke Argumente 1-2 und gebe das letzte Argument zurueck
template<typename T1, typename T2, typename T3>
T3 print (T1 x1, T2 x2, T3 x3) 
{
  std::cout.precision(16);
  std::cout << x1 << " " << x2 << std::endl;
  return x3;
}

// Drucke Argumente 1-3 und gebe das letzte Argument zurueck
template<typename T1, typename T2, typename T3, typename T4>
T4 print (T1 x1, T2 x2, T3 x3, T4 x4) 
{
  std::cout.precision(16);
  std::cout << x1 << " " << x2 << " " << x3 << std::endl;
  return x4;
}

// gebe einfach Null zurueck. Vorsicht: Koennte bei Optimierung dazu 
// fuehren, dass das Argument gar nicht berechnet wird.
template<typename T>
int dump (T x)
{
  return 0;
}

// Gebe eine int Zahl ein und liefere diese als Ergebnis
int enter_int ()
{
  int x;
  std::cin >> x;
  return x;
}

// Gebe eine int Zahl ein und liefere diese als Ergebnis
int enter_int (std::string s)
{
  std::cout << s;
  int x;
  std::cin >> x;
  return x;
}

// Lese Argument i als int-Zahl ein
int readarg_int (int argc, char** argv, int i)
{
  if (argc<i+1) {
    std::cout << "Kann Argument " << i << " nicht lesen: zuwenig Argumente" << std::endl;
    exit(0);
  }
  int x; 
  sscanf(argv[i],"%d",&x);
  return x;
}

// Lese Argument i als double-Zahl ein
double readarg_double (int argc, char** argv, int i)
{
  if (argc<i+1) {
    std::cout << "Kann Argument " << i << " nicht lesen: zuwenig Argumente" << std::endl;
    exit(0);
  }
  double x; 
  sscanf(argv[i],"%lg",&x);
  return x;
}

