#include using namespace std; #define MAX 110000 int n, m, s[MAX], a, b, sz; vector gr[MAX]; bool used[MAX]; vector d, p[MAX]; void dfs(int v) { used[v] = true; d.push_back(v); bool fl = false; for(int i = 0; i < gr[v].size(); i++) { if(!used[gr[v][i]]) { dfs(gr[v][i]); d.push_back(v); fl = true; } } return; } int main() { freopen("taxi.in", "r", stdin); freopen("taxi.out", "w", stdout); scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++)scanf("%d", &s[i]); for(int i = 1; i <= m; i++) { scanf("%d%d", &a, &b); gr[a].push_back(b); gr[b].push_back(a); } printf("%d", s[1]); for(int i = 2; i <= n; i++)printf(" %d", s[i]); printf("\n"); dfs(1); sz = 0; for(int i = 0; i < d.size() - 1; ) { set st; while(i < d.size() && st.count(d[i]) == 0) { p[sz].push_back(d[i]); st.insert(d[i]); i++; } i--; sz++; } printf("%d\n", sz); for(int i = 0; i < sz; i++) { printf("%d", p[i].size()); for(int j = 0; j < p[i].size(); j++) { printf(" %d", p[i][j]); } printf("\n"); } return 0; }