#include <bits/stdc++.h>
using namespace std;
int n, m, k;
vector<vector<int> > ans;
int c;
void go(int v) {
  if (v == -1) return;
  if (ans[c].size() + 1 > ((2 * n + k - 1) / k)) {
    c++;
  }
  vector<int> &last = ans[c];
  last.push_back(v);
}
vector<vector<int> > edg;
vector<int> used;
void dfs(int v, int p = -1) {
  used[v] = true;
  for (int i = 0; i < edg[v].size(); i++) {
    int to = edg[v][i];
    if (used[to]) continue;
    go(to);
    dfs(to, v);
  }
  go(p);
}
int main() {
  cin >> n >> m >> k;
  edg.resize(n);
  used.assign(n, false);
  ans.resize(k);
  for (int i = 0; i < m; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    u--, v--;
    edg[u].push_back(v);
    edg[v].push_back(u);
  }
  go(0);
  dfs(0);
  for (int i = 0; i < k; i++) {
    int sz = ans[i].size();
    if (sz == 0) {
      printf("1 1\n");
    } else {
      printf("%d ", sz);
      for (int j = 0; j < sz; j++) {
        printf("%d", ans[i][j] + 1);
        if (j == sz - 1)
          printf("\n");
        else
          printf(" ");
      }
    }
  }
}
