/****************************************************************************************************** ** Copyright (C) 2011.07.01-2013.07.01 ** Author: famousDT <[email protected]> ** Edit date: 2011-12-08 ******************************************************************************************************/ #include <stdio.h> #include <stdlib.h>//abs,atof(string to float),atoi,atol,atoll #include <math.h>//atan,acos,asin,atan2(a,b)(a/b atan),ceil,floor,cos,exp(x)(e^x),fabs,log(for E),log10 #include <vector> #include <queue> #include <map> #include <time.h> #include <set> #include <list> #include <stack> #include <string> #include <iostream> #include <fstream> #include <assert.h> #include <bitset> #include <iterator>//C++Primer #include <string.h>//memcpy(to,from,count #include <ctype.h>//character process:isalpha,isdigit,islower,tolower,isblank,iscntrl,isprll #include <numeric> #include <functional> #include <algorithm> using namespace std; typedef long long int ll; #define MY_PI acos(-1) #define MY_MAX(a, b) ((a) > (b) ? (a) : (b)) #define MY_MIN(a, b) ((a) < (b) ? (a) : (b)) #define MY_MALLOC(n, type) ((type *)malloc((n) * sizeof(type))) #define MY_ABS(a) (((a) >= 0) ? (a) : (-(a))) #define MY_INT_MAX 0x7fffffff /*==========================================================*\ | \*==========================================================*/ int p[200005]; int rank[200005]; void make_set(int x) { p[x] = x; rank[x] = 0; } int find_set(int x) { if (x != p[x]) p[x] = find_set(p[x]); return p[x]; } void link(int x, int y) { if (rank[x] > rank[y]) p[y] = x; else { p[x] = y; if (rank[x] == rank[y]) rank[y]++; } } void union_set(int x, int y) { link(find_set(x), find_set(y)); } int ans[200005]; int main() { int n; while (scanf("%d", &n) == 1 && n) { memset(ans, 0, sizeof(ans)); int i, x, index; for (i = 1; i <= 2 * n + 1; ++i) make_set(i); for (i = 1; i <= n; ++i) { scanf("%d", &x); index = find_set(x); ans[index] = i; p[index] = index + 1; } for (i = 2 * n + 1; i >= 1; --i) if (ans[i]) break; printf("%d\n", i); for (index = 1; index < i; ++index) printf("%d ", ans[index]); printf("%d\n", ans[i]); } return 0; }