#include<stdio.h>
#include<math.h>
#define TRUE 1
#define FALSE 0

#include<stdio.h>

/* 値を入れ替える関数 */
void swap (int *x, int *y) {
  int temp;    // 値を一時保存する変数

  temp = *x;
  *x = *y;
  *y = temp;
}

/***
* pivotを決め、
* 全データをpivotを境目に振り分け、
* pivotの添え字を返す
***/
int partition (int array[], int left, int right) {
  int i, j, pivot;
  i = left;
  j = right + 1;
  pivot = left;   // 先頭要素をpivotとする

  do {
    do { i++; } while (array[i] < array[pivot]);
    do { j--; } while (array[pivot] < array[j]);
    // pivotより小さいものを左へ、大きいものを右へ
    if (i < j) { swap(&array[i], &array[j]); }
  } while (i < j);

  swap(&array[pivot], &array[j]);   //pivotを更新

  return j;
}

/* クイックソート */
void quick_sort (int array[], int left, int right) {
  int pivot;

  if (left < right) {
    pivot = partition(array, left, right);
    quick_sort(array, left, pivot-1);   // pivotを境に再帰的にクイックソート
    quick_sort(array, pivot+1, right);
  }
}

int main()
{
  int N;
  scanf("%d",&N);
  int A[N+1];
  for(int i=0;i<N;i++){
    scanf("%d",&A[i]);
  }
  quick_sort(A,0,N-1);
  
  int A_max = A[N-1];
  int dp[A_max+1];
  for(int i=0;i<A_max;i++){
    dp[i]=1;
  }
  
  for(int i=0;i<sqrt(A_max);i++){
    if(dp[A[i]-1]==FALSE) continue;
    if(A[i]==A[i+1]){
      dp[A[i]-1]=FALSE;
    }
    for(int j=2;j<A_max/A[i]+1;j++){
      dp[j*A[i]-1]=FALSE;
    }
  }
  
  int count=0;
  for(int i=0;i<N;i++){
    if(dp[A[i]-1]==TRUE) count++;
  }
  
  printf("%d\n",count);
  for(int i=0;i<A_max;i++){printf("%d",dp[i]);}
}