#include <iostream>
using namespace std;

template<class AB,class BA>
void mirror(const AB& ab,BA& ba){
    ba = ab;
}
template<class A,class B,class C,class D>
void mirror(const pair<A, B>& a, pair<C, D>& b){
    mirror(a.first, b.second);
    mirror(a.second, b.first);
}

int main(){
    pair<int,float> ab;
    ab.first=3;
    ab.second=2.0;
    pair<float,int> ba;
    mirror(ab,ba);
    printf("%d\n",ba.second);
    
    pair<pair<int,float>,pair<float,int> > ab_cd;
    ab_cd.first.first=4;
    pair<pair<int,float>,pair<float,int> > dc_ba;
    mirror(ab_cd,dc_ba);
    printf("%d\n",dc_ba.second.second);

    return 0;
    
}