#include <bits/stdc++.h>
using namespace std;
vector<long long int> adj[100005], edge[100005], back_edge[100005], ans;
long long int vis[100005] = {0}, level[100005] = {0}, sn;
stack<long long int> s;
void dfs(long long int x, long long int p) {
  vis[x] = 1;
  level[x] = level[p] + 1;
  long long int i;
  for (i = 0; i < (long long int)adj[x].size(); i++) {
    if (vis[adj[x][i]]) {
      if (adj[x][i] != p && level[x] > level[adj[x][i]]) {
        back_edge[x].push_back(adj[x][i]);
      }
    } else {
      edge[x].push_back(adj[x][i]);
      dfs(adj[x][i], x);
    }
  }
}
void path(long long int a, long long int x) {
  s.push(a);
  if (a == x) {
    vector<long long int> v;
    while ((long long int)s.size()) {
      v.push_back(s.top());
      s.pop();
    }
    long long int i;
    cout << (long long int)v.size() << "\n";
    for (i = 0; i < (long long int)v.size(); i++) {
      cout << v[i] << " ";
    }
    exit(0);
  }
  long long int i;
  for (i = 0; i < (long long int)edge[a].size(); i++) {
    path(edge[a][i], x);
  }
  s.pop();
}
void dfs_tree(long long int a) {
  long long int i, x, y;
  if ((long long int)back_edge[a].size() >= sn - 2) {
    cout << 2 << "\n";
    y = 1000000007;
    for (i = 0; i < (long long int)back_edge[a].size(); i++) {
      if (level[back_edge[a][i]] < y) {
        y = level[back_edge[a][i]];
        x = back_edge[a][i];
      }
    }
    path(x, a);
  }
  for (i = 0; i < (long long int)edge[a].size(); i++) {
    dfs_tree(edge[a][i]);
  }
  if (!vis[a]) {
    vis[a] = 1;
    ans.push_back(a);
    for (i = 0; i < (long long int)adj[a].size(); i++) {
      vis[adj[a][i]] = 1;
    }
  }
}
void shikhar7s(long long int cas) {
  long long int n, m, i, x, y, j, va = 1000000007, in;
  cin >> n >> m;
  sn = sqrt(n);
  if ((sn * sn) != n) sn++;
  for (i = 0; i < m; i++) {
    cin >> x >> y;
    adj[x].push_back(y);
    adj[y].push_back(x);
  }
  dfs(1, 0);
  for (i = 0; i < 100005; i++) {
    vis[i] = 0;
  }
  dfs_tree(1);
  cout << 1 << "\n";
  for (i = 0; i < sn; i++) {
    cout << ans[i] << " ";
  }
}
signed main() {
  std::ios_base::sync_with_stdio(false);
  long long int t = 1;
  long long int cas = 1;
  while (cas <= t) {
    shikhar7s(cas);
    cas++;
  }
  return 0;
}
