#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int mod2 = 998244353;
long long exp(long long base, long long e, long long md);
void fact_init(int n, int md);
long long komb(int a, int b, int md);
vector<long long> fact;
vector<long long> inv_fact;
long long exp(long long base, long long e, long long md) {
  long long mul = base % md;
  long long res = 1;
  while (e) {
    if (e % 2) res = (res * mul) % md;
    e /= 2;
    mul = mul * mul % md;
  }
  return res;
}
void fact_init(int n, int md) {
  fact.resize(n + 5);
  inv_fact.resize(n + 5);
  fact[0] = inv_fact[0] = 1;
  for (int i = 1; i <= n; i++) {
    fact[i] = (fact[i - 1] * i) % md;
    inv_fact[i] = exp(fact[i], md - 2, md);
  }
}
long long komb(int a, int b, int md) {
  if (a < b) return 0;
  return fact[a] * (inv_fact[a - b] * inv_fact[b] % md) % md;
}
const int N = 2e5 + 5;
vector<int> vec[N];
bool vis[N];
vector<int> path;
void dfs(int cur, int par) {
  path.push_back(cur);
  for (int node : vec[cur]) {
    if (vis[node]) continue;
    vis[node] = true;
    dfs(node, cur);
  }
  if (par) path.push_back(par);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  int n, m, k;
  cin >> n >> m >> k;
  while (m--) {
    int a, b;
    cin >> a >> b;
    vec[a].push_back(b);
    vec[b].push_back(a);
  }
  vis[1] = true;
  dfs(1, 0);
  assert(k * (2 * n + k - 1) / k >= path.size());
  int ptr = 0;
  int foo = k;
  while (foo--) {
    int cnt = min((2 * n + k - 1) / k, (int)path.size() - ptr);
    if (cnt == 0) {
      cout << "1 1\n";
      continue;
    }
    cout << cnt << " ";
    for (; cnt--; ptr++) {
      cout << path[ptr] << " ";
    }
    cout << "\n";
  }
}
