#include <bits/stdc++.h>   using namespace std;   const long long mod = 1000000007;   const int dx[8] = {0, -1, 0, 1, -1, -1, 1, 1},             dy[8] = {1, 0, -1, 0, -1, 1, -1, 1};   int a[100005];   int cnt = 0;   int n, m, k;   vector<int> vt[100005], vt2[2];   stack<int> st;   int dfn[100005], color[100005];   void dfs(int x, int fa) {     st.push(x);     dfn[x] = st.size();     for (int i = 0; i < vt[x].size(); i++) {       int v = vt[x][i];       if (v == fa) continue;       if (!dfn[v]) {         dfs(v, x);       } else if (dfn[x] - dfn[v] + 1 <= k && dfn[x] > dfn[v]) {         cout << 2 << endl;         cout << dfn[x] - dfn[v] + 1 << endl;         while (1) {           cout << st.top() <<    ;           if (st.top() == v) {             exit(0);           }           st.pop();         }       }     }     st.pop();   }   void dfs2(int x, int fa, int co) {     vt2[co].push_back(x);     color[x] = co;     if (vt2[co].size() == k) {       for (int i = 0; i < vt2[co].size(); i++) {         cout << vt2[co][i] <<    ;       }       exit(0);     }     for (int i = 0; i < vt[x].size(); i++) {       int v = vt[x][i];       if (v == fa || color[v] != -1) continue;       dfs2(v, x, co ^ 1);     }   }   void solve() {     memset(color, -1, sizeof color);     cin >> n >> m >> k;     for (int i = 1; i <= m; i++) {       int x, y;       cin >> x >> y;       vt[x].push_back(y);       vt[y].push_back(x);     }     dfs(1, 0);     k = (k + 1) / 2;     cout << 1 << endl;     dfs2(1, 0, 0);   }   int main() {     ios::sync_with_stdio(0);     ;     solve();     return 0;   }   