#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
vector<pair<int, int> > adj[maxn];
vector<int> v[maxn];
bool visit[maxn];
int n, m, u, v1, ans;
long long modx(long long base, long long ex) {
  long long ans = 1LL, val = base;
  while (ex > 0LL) {
    if (ex & 1LL) ans = (ans * val) % 1000000007LL;
    val = (val * val) % 1000000007LL;
    ex = ex >> 1LL;
  }
  return ans;
}
void dfs(int start, int day) {
  visit[start] = true;
  int cnt = 1;
  for (int i = 0; i < adj[start].size(); i++) {
    int node = adj[start][i].first;
    if (!visit[node]) {
      if (cnt == day) cnt++;
      ans = max(ans, cnt);
      v[cnt].push_back(adj[start][i].second);
      dfs(node, cnt++);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  for (int i = 1; i < n; i++) {
    cin >> u >> v1;
    adj[u].push_back(make_pair(v1, i));
    adj[v1].push_back(make_pair(u, i));
  }
  dfs(1, 0);
  cout << ans << endl;
  for (int i = 1; i <= ans; i++) {
    cout << v[i].size();
    for (int j = 0; j < v[i].size(); j++) cout << " " << v[i][j];
    cout << endl;
  }
  return 0;
}
