#include<bits/stdc++.h>
using namespace std ;
#define F first
#define S second
const int N = 1e5+5 ;
int n , m , brr[4*N] , cnt , flag[N] ;
vector<pair<int,int>> vp ;
pair<int,int> arr[2*N] ;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) ;
cin >> n ; m = 2*n ;
vp.resize(n) ;
for(int i=0 ; i<n ; i++){
cin >> vp[i].F >> vp[i].S ;
arr[vp[i].F]={vp[i].S,i} ; arr[vp[i].S]={vp[i].F,i} ;
if(abs(vp[i].F-vp[i].S)&1) brr[vp[i].F+vp[i].S]++ ;
}
int sum = max_element(brr+1,brr+4*n)-brr ; sum%=m ;
cnt = n ;
for(int i=0 ; i<n ; i++){
if((vp[i].F+vp[i].S)%m==sum) cnt-- ;
}
cout << cnt << '\n' ;
for(int i=0 ; i<n ; i++){
if((arr[i].F+i)%m!=sum) cout << arr[i].S << ' ' << arr[i].F << ' ' << (sum-i+m)%m << '\n' ;
}
return 0 ;
int pos = 0 ;
while(pos<2*n && flag[pos]) pos++ ;
auto f = [&] (int k) -> int {
k%=m ; k+=m ; k%=m ; return k ;
};
while(cnt){
int cur = pos ;
do{
int temp = f(sum-cur) ;
cout << arr[cur].S << ' ' << arr[cur].F << ' ' << temp << '\n' ;
flag[cur] = flag[temp] = 1 ; cnt-- ;
cur = arr[temp].F ;
}while(!flag[cur]) ;
while(pos<m && flag[pos]) pos++ ;
}
return 0 ;
}