#include <bits/stdc++.h>

using namespace std;

const char IMPOSSIBLE[] = "Impossible";

#define MAXN 105

int K, N, M;
int A[MAXN][MAXN];

void addEdge(int a, int b) {
	A[a][b] = A[b][a] = 1;
}

void removeEdge(int a, int b) {
	A[a][b] = A[b][a] = 0;
}

void printGraph() {
	int cnt = 0;
	for (int i = 0; i < K; i++) {
		for (int j = i + 1; j < K; j++) {
			cnt += A[i][j];
		}
	}
	
	cout << cnt << '\n';

	for (int i = 0; i < K; i++) {
		for (int j = i + 1; j < K; j++) {
			if (A[i][j] == 1) {
				cout << i + 1 << ' ' << j + 1 << '\n';
			}
		}
	}
}

int main() {
	// assert(freopen("grafcandrei.in", "r", stdin));
	// assert(freopen("grafcandrei.out", "w", stdout));
	cin.sync_with_stdio(false);

	cin >> K >> M >> N;

	if (5 <= K && K <= 4) {

	} else {
		if (N == 1) {
			for (int i = 0; i < K; i++) {
				for (int j = i + 1; j < K; j++) {
					addEdge(i, j);
				}
			}
			int i = 0;
			int comp = K;
			while (comp > M) {
				removeEdge(i, i + 1);
				comp--;
				i++;
			}
			printGraph();
		} else if (M == 1) {
			int i = 0;
			int comp = K;
			while (comp > N) {
				addEdge(i, i + 1);
				comp--;
				i++;
			}
			printGraph();
		} else {
			cout << IMPOSSIBLE << endl;
		}
	}

	return 0;
}