#include <bits/stdc++.h>
using namespace std;
int gn;
array<int, 2> ge[200010];
vector<vector<int> > aj(200010);
int vis[200010];
inline int ng(int vn, int ve) {
  if (ge[ve][0] == vn)
    return ge[ve][1];
  else
    return ge[ve][0];
}
vector<vector<int> > gm(200010);
void dfs(int vn, int vp) {
  vis[vn] = 1;
  int vc = 1;
  for (int i = 0; i < aj[vn].size(); i++) {
    int nn = ng(vn, aj[vn][i]);
    if (vis[nn]) continue;
    if (vc == vp) vc++;
    gm[vc].emplace_back(aj[vn][i]);
    dfs(nn, vc);
    vc++;
  }
}
int main(int argc, char **argv) {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  ;
  cin >> gn;
  for (int i = 1; i <= gn - 1; i++) {
    cin >> ge[i][0] >> ge[i][1];
    aj[ge[i][0]].emplace_back(i);
    aj[ge[i][1]].emplace_back(i);
  }
  dfs(1, 0);
  int tt = 0;
  for (int i = 1; i < gm.size(); i++) {
    if (gm[i].empty()) break;
    tt++;
  }
  cout << tt << '\n';
  for (int i = 1; i <= tt; i++) {
    cout << gm[i].size() << " ";
    for (int j = 0; j < gm[i].size(); j++) cout << gm[i][j] << " ";
    cout << '\n';
  }
  return 0;
}
