// Rain Dreamer MODEL // iSea @ 2014-08-31 18:58 // Comment - #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; // Self Template Code BGEIN #define sz(x) ((int)((x).size())) #define out(x) printf(#x" %d\n", x) #define rep(i,n) for (int i = 0; i < (n); ++i) #define repf(i,a,b) for (int i = (a); i <= (b); ++i) #define repd(i,a,b) for (int i = (a); i >= (b); --i) #define repcase int t, Case = 1; for (scanf ("%d", &t); t; --t) #define repeach(i,x) for (__typeof((x).begin()) i = (x).begin(); i != (x).end(); ++i) typedef long long int64; typedef pair pii; int sgn(double x) { return (x > 1e-8) - (x < -1e-8); } int count_bit(int x) { return x == 0? 0 : count_bit(x >> 1) + (x & 1); } template inline void ckmin(T &a, const T b) { if (b < a) a = b; } template inline void ckmax(T &a, const T b) { if (b > a) a = b; } // Self Template Code END void print(vector c) { putchar ('('); bool first = true; repeach (it, c) { if (!first) putchar(' '); first = false; printf ("%d", *it); } putchar (')'); } int n, a[100010]; bool vis[100010]; int main() { while (scanf ("%d", &n) != EOF) { repf (i, 1, n) { scanf ("%d", a + i); vis[i] = false; } repf (i, 1, n) { if (!vis[i]) { vector c; c.push_back(i); int cur = a[i]; vis[cur] = true; while (cur != i) { c.push_back(cur); cur = a[cur]; vis[cur] = true; } print(c); } } puts (""); } return 0; }