#include <bits/stdc++.h>
using namespace std;

const int maxn = 2005;
struct node {
	long long x, y, a, idx;
	node(long long _x, long long _y, long long _a, long long _idx)
		: x(_x), y(_y), a(_a), idx(_idx) {}
	node() {}
	void pri() {
		cout << x << ' ' << y << ' ' << a << ' ' << idx << endl;
	}
} nodes[maxn], rnode[maxn];
node g[maxn];
int g_cnt;
node p;

bool cmp(node a, node b) {
	return atan2(a.y - p.y, a.x - p.x) < atan2(b.y - p.y, b.x - p.x);
}

bool check(int a, int b) {
	set< int > S;
	int now = a;
	while (true) {
		S.insert(now);
		node tmp = rnode[now];
		now = tmp.idx;
		if (S.count(now)) {
			break;
		}
	}
	return S.count(b);
}

int ans;
vector< pair< int, int > > V;
void work(int a, int b) {
	node tmp = nodes[a];
	nodes[a].a = nodes[b].a;
	nodes[b].a = tmp.a;
	rnode[nodes[a].a] = nodes[a];
	rnode[nodes[b].a] = nodes[b];
	V.push_back(make_pair(a, b));
}

int main() {
	int n;
	scanf("%d", &n);
	int x, y, a;
	for (int i = 1; i <= n; i++) {
		scanf("%d %d %d", &x, &y, &a);
		nodes[i] = node(x, y, a, i);
		rnode[a] = nodes[i];
		if (a != i) {
			g[++g_cnt] = nodes[i];
		}
	}
	if (g_cnt == 0) {
		puts("0");
		return 0;
	}
	p = g[1];
	// cout << p.x << ' ' << p.y << endl;
	sort(g + 1, g + 1 + g_cnt, cmp);
	g[++g_cnt] = g[1];
	// for (int i = 1; i <= g_cnt; i++) {
	// 	// g[i].pri();
	// 	cout << g[i].x - p.x << ' ' << g[i].y - p.y << ' ' << atan2(g[i].y - p.y, g[i].x - p.x) << endl;
	// }

	for (int i = 1; i < g_cnt; i++) {
		if (g[i].idx != p.idx && g[i + 1].idx != p.idx && !check(g[i].idx, g[i + 1].idx)) {
			// cout << "ttt" << g[i].idx << ' ' << g[i + 1].idx << endl;
			work(g[i].idx, g[i + 1].idx);
		}
	}
	// cout << "*******" << endl;
	// for (int i = 1; i <= g_cnt; i++) {
	// 	int idx = g[i].idx;
	// 	cout << nodes[idx].x << ' ' << nodes[idx].y << ' ' << nodes[idx].a << ' ' << nodes[idx].idx << endl;
	// }

	int idx = p.idx;
	while (true) {
		node tmp = nodes[idx];
		if (tmp.a == idx) {
			break;
		}
		node tmp2 = nodes[tmp.a];

		work(idx, tmp2.idx);
	}
	cout << V.size() << endl;
	for (auto it : V) {
		printf("%d %d\n", it.first, it.second);
	}
	return 0;
}