#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <set>

using namespace std;

const int NMAX = 50000;

int n;

//возрастающая послед-ть (YES)
void test3() {
  n = NMAX;
  cout << n << endl;
  for (int i=0; i<n; i++) cout << i-n/2 << " ";
  cout << endl;
}

//убывающая послед-ть (YES)
void test4() {
  n = NMAX;
  cout << n << endl;
  for (int i=0; i<n; i++) cout << n/2-i << " ";
  cout << endl;
}

//чередующуюся послед-ть (yes)
void test5() {
  n = NMAX;
  cout << n << endl;
  int f=0, l=n-1;
  for (int i=0; i<n; i++) 
    if (i%2)
      cout << f++ << " ";
    else
      cout << l-- << " ";
  cout << endl;
}


//небольшая ошибка (no)
void test6() {
  n = NMAX;
  cout << n << endl;
  int f=0, l=n-1;
  for (int i=0; i<n; i++) 
  {
    if (i==12345) 
      cout << n+1 << " ";
    else
    if (i%2)
      cout << f++ << " ";
    else
      cout << l-- << " ";

  }
  cout << endl;
}

//случайная последовательность (ответ NO)
void test7() {
  srand(12345);
  set <int> s;
  n = NMAX;
  cout << n << endl;
  int c;
  while ( (c=s.size()) < n) {
    int r = rand()*rand();
    s.insert(r);
    if (s.size() > c) cout << r << " ";
  }
  cout << endl;
}

//чередование возрастающих и убывающих отрезков 
//случайной длины (ответ YES)
void test8() {
  srand(4321);  
  int n=NMAX;
  cout << n << endl;
  int f=0, l=n-1;
  while (f<=l) {
    if (rand() < RAND_MAX/2) 
      cout << f++ << " ";
    else
      cout << l-- << " ";
  }
}


int main (int argc, char *argv[]) {
  if (argc==0) return 1;
  int testnum = atoi(argv[1]);
  switch (testnum) {
   case 3: test3(); break;
   case 4: test4(); break;
   case 5: test5(); break;
   case 6: test6(); break;
   case 7: test7(); break;
   case 8: test8(); break;
  };
  return 0;
}
