#include <random>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <utility>
#include <iostream>
#include <string>
#define REP_ANY(type,i,l,r) for(type i = l; i <= r; ++i)
#define REP_INT(i,l,r) for(int i = l; i <= r; ++i)
#define GET_REP_MACRO(_1,_2,_3,_4,NAME,...) NAME
#define rep(...) GET_REP_MACRO(__VA_ARGS__,REP_ANY,REP_INT)(__VA_ARGS__)
#define all(v) (v).begin(), (v).end()
#define sz(v) ll(v.size())
#define watch(x) cerr << (#x) << " = " << x << '\n'
#define T1 template<typename T> static
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
T1 ostream& operator<<(ostream& stream, const vector<T>& t);
template <typename F, typename S> static
ostream& operator<<(ostream& stream, const pair<F, S>& t){
    return stream << t.first << ' ' << t.second;
}
template <typename F, typename S> static
istream& operator>>(istream& stream, pair<F, S>& t){
    return stream >> t.first >> t.second;
}
T1 istream& read(T, T, istream& = cin);
T1 istream& operator>>(istream& stream, vector<T>& t){
    return read(all(t), stream);
}
T1 istream& read(T b, T e, istream& stream){
    for(T it = b; it != e; ++it)
        stream >> *it;
    return stream;
}
T1 void print(T x, string end = "\n"){
    cout << x << end;
}
T1 void print(vector<vector<T>> arr){
    for(int i = 0; i < sz(arr); ++i){
        cout << "[" << arr[i] << "]";
        if(i + 1 < sz(arr))
            cout << ", ";
    }
    cout << '\n';
}
T1 ostream& print(T b, T e, string sep = " ", ostream& stream = cout){
    for(T it = b; it != e; ++it){
        stream << *it;
        if(it + 1 != e)
            stream << sep;
    }
    return stream;
}
T1 ostream& operator<<(ostream& stream, const vector<T>& t){
    for(int i = 0; i < sz(t); ++i){
        stream << t[i];
        if(i+1 < sz(t))
            stream << ' ';
    }
    return stream;
}
T1 void print(vector<T> arr, string sep = " "){
    if(arr.empty()){
        return;
    }
    print(arr.begin(), arr.end(), sep);
    cout << '\n';
}
int cnt = 0;
bool isTripletsValid(vector<vector<uint64_t> > &fres, int N){
    ++cnt;
    if(cnt % 100000 == 0)
        watch(cnt);
    rep(i,0,N-1){
        if(fres[i][0] == fres[i][1]) return false;
        if(fres[i][0] == fres[i][2]) return false;
        if(fres[i][1] == fres[i][2]) return false;
    }
    return true;
}
template<typename D, typename G>
ull getRandom64(D &dist, G &generator){
    ull answer = 0;
    rep(i,0,63)
        answer = 2*answer+dist(generator);
    return answer;
}
vector<vector<uint64_t> > testCase4(int seed, int N)
{
	std::mt19937 generator(seed);
	std::uniform_int_distribution<int> dist(0, 1);
	const int K = 3;
	vector<vector<uint64_t> > fres(N, vector<uint64_t>(3));
	do
	{
		vector<vector<uint64_t> > res(K*N, vector<uint64_t>(3));
		res[0] = { getRandom64(dist, generator),getRandom64(dist, generator),getRandom64(dist, generator) };
		for (uint32_t i = 1; i < K * N; ++i)
		{
			vector<uint64_t>& pr = res[i];
			pr = res[i - 1];
			random_shuffle(pr.begin(), pr.end());
			const uint32_t MAXT = 10;
			uint64_t tmp = getRandom64(dist, generator) % MAXT;
			switch (tmp)
			{
			case 0:
				pr[0] |= pr[1];
				break;
			case 1: 
				pr[0] &= pr[1];
				break;
			case 2:
				pr[0] ^= pr[1];
				break;
			case 3:
				pr[0] += pr[1];
				break;
			case 4:
				pr[0] -= pr[1];
				break;
			case 5:
				pr[0] = pr[0] - (pr[0] & 0xFFFFFFFF) + ((pr[0] & pr[1]) & 0xFFFFFFFF);
				break;
			case 6:
				pr[0] = pr[0] - (pr[0] & 0xFFFFFFFF) + ((pr[0] | pr[1]) & 0xFFFFFFFF);
				break;
			case 7:
				pr[0] = pr[0] - (pr[0] & 0xFFFFFFFF) + ((pr[0] ^ pr[1]) & 0xFFFFFFFF);
				break;
			case 8:
				pr[0] = pr[0] - (pr[0] & 0xFFFFFFFF) + ((pr[0] + pr[1]) & 0xFFFFFFFF);
				break;
			case 9:
				pr[0] = pr[0] - (pr[0] & 0xFFFFFFFF) + ((pr[0] - pr[1]) & 0xFFFFFFFF);
				break;
			default:
				break;
			}
		}
		for (uint32_t i = 0; i < N; ++i)
			fres[i] = res[i*K];
	} while (!isTripletsValid(fres, N));
	return fres;
}
void _(){
    rep(i,0,99){
        print(64);
        print(testCase4(0,64),"\n");
    }
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout << fixed << setprecision(15);
        _();
}
