#include <bits/stdc++.h>
using namespace std;
vector<long long> v[200001];
long long ans = 0;
vector<long long> m[200001];
map<pair<long long, long long>, long long> edges;
void dfs(long long x, long long p, long long w) {
  long long d = 1;
  for (long long i = 0; i < (long long)v[x].size(); i++) {
    if (v[x][i] == p) continue;
    if (d == w) d++;
    ans = max(ans, d);
    m[d].push_back(edges[{x, v[x][i]}]);
    dfs(v[x][i], x, d);
    d++;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long n;
  cin >> n;
  for (long long i = 0; i < n - 1; i++) {
    long long x, y;
    cin >> x >> y;
    v[x].push_back(y);
    v[y].push_back(x);
    edges[{x, y}] = i + 1;
    edges[{y, x}] = i + 1;
  }
  dfs(1, 1, 0);
  cout << ans << "\n";
  for (long long i = 1; i <= ans; i++) {
    cout << m[i].size() << " ";
    for (long long j = 0; j < (long long)m[i].size(); j++)
      cout << m[i][j] << " ";
    cout << "\n";
  }
}
