#include <bits/stdc++.h>
#pragma GCC optimize(3, "Ofast", "inline")
using namespace std;
void io() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
}
int t, n, m, k, cnt = 0;
int path[500010];
vector<int> vec[500010 >> 1];
bool vis[500010];
bool flag = true;
struct Point {
  double x, y;
  Point() {}
  Point(double xx, double yy) : x(xx), y(yy) {}
} p1[500010], p2[500010], pa, pb;
double cross(Point a, Point b) { return a.x * b.y - a.y * b.x; }
double dot(Point a, Point b) { return a.x * b.x + a.y * b.y; }
Point operator*(Point a, double t) { return Point(a.x * t, a.y * t); }
Point operator+(Point a, Point b) { return Point(a.x + b.x, a.y + b.y); }
Point operator-(Point a, Point b) { return Point(a.x - b.x, a.y - b.y); }
Point operator/(Point a, double p) { return Point(a.x / p, a.y / p); }
double len(Point a) { return sqrt(dot(a, a)); }
int dcmp(double x) {
  if (fabs(x) < 1e-7) return 0;
  if (x < 0) return -1;
  return 1;
}
bool operator==(const Point& a, const Point& b) {
  return dcmp(a.x - b.x) == 0 && dcmp(a.y - b.y) == 0;
}
double DistanceToSegment(Point P, Point A, Point B) {
  if (A == B) return len(P - A);
  Point v1 = B - A, v2 = P - A, v3 = P - B;
  if (dcmp(dot(v1, v2)) < 0)
    return len(v2);
  else if (dcmp(dot(v1, v3)) > 0)
    return len(v3);
  else
    return fabs(cross(v1, v2)) / len(v1);
}
void upd(Point P, Point A, Point B) {}
void dfs(int x) {
  path[++cnt] = x;
  vis[x] = true;
  for (int i = 0; i < vec[x].size(); ++i) {
    if (!vis[vec[x][i]]) {
      dfs(vec[x][i]);
      path[++cnt] = x;
    }
  }
}
void solve() {
  int maxx = (n + n + k - 1) / k;
  for (int i = 0; i <= (k - 1); ++i) {
    int sp = min(maxx, cnt);
    if (sp == 0)
      cout << "1 1\n";
    else {
      cout << sp << ' ';
      for (int j = 0; j < sp && cnt; ++j) cout << path[cnt--] << ' ';
      cout << '\n';
    }
  }
}
int u, v;
int main() {
  io();
  cin >> n >> m >> k;
  for (int i = 1; i <= n; ++i) vis[i] = false;
  for (int i = 1; i <= m; ++i) {
    cin >> u >> v;
    vec[u].emplace_back(v);
    vec[v].emplace_back(u);
  }
  dfs(1);
  solve();
}
