#include <iostream>
#include <tuple>
#include <type_traits>


using namespace std;

template<template<class,class> class F, typename...Ts>
struct Univ;

template<template<class, class> class F, typename T, typename U, typename...Ts>
struct Univ<F, T, U, Ts...>
{
	static const int value = F<T, U>::value && Univ<F, U, Ts...>::value;
};

template<template<class, class> class F, typename T>
struct Univ<F, T>
{
	static const int value = 1;
};


int main()
{
	cout << Univ<is_same,int, int, int>::value; 

	return 0;
}