#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define MAXN 105 int K, M, N; int A[MAXN][MAXN]; vector > edges; void addEdge(int a, int b) { A[a][b] = 1 - A[a][b]; A[b][a] = 1 - A[b][a]; } int main() { // freopen("date.in", "r", stdin); // freopen("date.out","w", stdout); cin >> K >> M >> N; if(N == 1) { if(M == 1) { if(K == 1) { cout << "0\n"; return 0; } else { cout << "Impossible\n"; return 0; } } else { for(int i = 0; i < K; i++) for(int j = 0; j < K; j++) A[i][j] = 1; for(int i = 0; i < K - M; i++) addEdge(i, i + 1); } } else { // N > 1 if(M > 1) { cout << "Impossible\n"; return 0; } else { // N>1, M=1 for(int i = 0; i < K - N; i++) addEdge(i, i + 1); } } for(int i = 0; i < K; i++) for(int j = i + 1; j < K; j++) if(A[i][j] == 1) edges.push_back(make_pair(i, j)); cout << (int)edges.size() << '\n'; for(vector > :: iterator it = edges.begin(); it != edges.end(); it++) cout << it->first + 1 << " " << it->second + 1 << '\n'; return 0; }