Zbiory 2

시간 제한6초메모리 제한2048 MB

요약
나눗셈으로 정의된 집합들에 합집합, 교집합, 여집합 연산을 최대 100,000번 적용해 주어진 목표 부분집합을 만든다.
난이도

어려움10점 중 8점

유형
구현, 정수론, 완전 탐색, 그리디
정답자
아직 제출이 없습니다

문제

W tym zadaniu będziemy rozpatrywać ciąg n+mn + m podzbiorów zbioru 1,…,n\\{1, \dots , n\\}. Zbiory A_1,…,A_nA\_1, \dots , A\_n są zdefiniowane następująco: wartość 1≤i≤n1 ≤ i ≤ n należy do zbioru A_jA\_j wtedy i tylko wtedy, gdy ii jest podzielne przez jj.

Przykładowo dla n=7n = 7 kolejne zbiory są następujące:

  • A_1=1,2,3,4,5,6,7A\_1 = \\{1, 2, 3, 4, 5, 6, 7\\}
  • A_2=2,4,6A\_2 = \\{2, 4, 6\\}
  • A_3=3,6A\_3 = \\{3, 6\\}
  • A_4=4A\_4 = \\{4\\}
  • A_5=5A\_5 = \\{5\\}
  • A_6=6A\_6 = \\{6\\}
  • A_7=7A\_7 = \\{7\\}

Kolejnych mm zbiorów – A_n+1,A_n+2,…,A_n+mA\_{n+1}, A\_{n+2}, \dots , A\_{n+m} – powstaje przez operacje sum, przecięć lub negacji na poprzednich zbiorach.

  • Operacja sumy zbiorów A_iA\_i oraz A_jA\_j (oznaczana przez A_i∪A_jA\_i ∪ A\_j) tworzy zbiór zawierający wszystkie liczby należące do któregokolwiek z A_iA\_i lub A_jA\_j.
  • Operacja przecięcia zbiorów A_iA\_i oraz A_jA\_j (oznaczana przez A_i∩A_jA\_i ∩ A\_j) tworzy zbiór zawierający wszystkie liczby należące do obu A_iA\_i oraz A_jA\_j.
  • Operacja negacji zbioru A_iA\_i (oznaczana przez A′_iA'\_i) tworzy zbiór zawierający wszystkie liczby całkowite 1≤j≤n1 ≤ j ≤ n, które nie należą do A_iA\_i.

Przykładowy ciąg operacji może wyglądać następująco:

  • A_8=A_5∪A_7=5,7A\_8 = A\_5 ∪ A\_7 = \\{5, 7\\}
  • A_9=A_2∩A_3=6A\_9 = A\_2 ∩ A\_3 = \\{6\\}
  • A_10=A′_8=1,2,3,4,6A\_{10} = A'\_8 = \\{1, 2, 3, 4, 6\\}
  • A_11=A_10∩A_8=;A\_{11} = A\_{10} ∩ A\_8 = \\{\\};
  • A_12=A′_3=1,2,4,5,7A\_{12} = A'\_3 = \\{1, 2, 4, 5, 7\\}
  • A_13=A_12∪A_12=1,2,4,5,7A\_{13} = A\_{12} ∪ A\_{12} = \\{1, 2, 4, 5, 7\\}
  • A_14=A_10∩A_13=1,2,4A\_{14} = A\_{10} ∩ A\_{13} = \\{1, 2, 4\\}
  • A_15=A_9∪A_14=1,2,4,6A\_{15} = A\_9 ∪ A\_{14} = \\{1, 2, 4, 6\\}

Mając daną liczbę nn oraz docelowy zbiór BB, Twoim zadaniem jest dobrać liczbę mm (0≤m≤100,0000 ≤ m ≤ 100\\, 000) oraz ciąg mm operacji, aby otrzymać zbiór A_n+mA\_{n+m} równy zbiorowi BB. Da się udowodnić, że dla limitów z treści zadania da się skonstruować dowolny podzbiór 1,…,n\\{1, \dots , n\\}, mieszcząc się w limicie operacji.

입력

W pierwszym wierszu wejścia znajdują się dwie liczby całkowite nn, ss (1≤n≤50,0001 ≤ n ≤ 50\\, 000, 1≤s≤n1 ≤ s ≤ n), oznaczające odpowiednio liczbę początkowych zbiorów oraz rozmiar zbioru docelowego BB. W drugim wierszu następuje ciąg ss liczb całkowitych b_1,b_2,…,b_sb\_1, b\_2, \dots , b\_s (1≤b_1<b_2<⋯<b_s≤n1 ≤ b\_1 < b\_2 < \dots < b\_s ≤ n), zawierający elementy zbioru BB.

출력

W pierwszym wierszu wyjścia należy wypisać liczbę całkowitą mm (0≤m≤100,0000 ≤ m ≤ 100\\, 000). W kolejnych mm wierszach powinny znajdować się opisy kolejnych operacji. Wiersz numer i, opisujący w jaki sposób powstał zbiór A_n+iA\_{n+i}, powinien być jednej z trzech postaci:

  • 1 xx yy – oznaczającej operację sumy A_n+i=A_x∪A_yA\_{n+i} = A\_x ∪ A\_y,
  • 2 xx yy – oznaczającej operację przecięcia A_n+i=A_x∩A_yA\_{n+i} = A\_x ∩ A\_y,
  • 3 xx – oznaczającej operację negacji A_n+i=A′_xA\_{n+i} = A'\_x.

Ponadto, musi być spełnione A_n+m=BA\_{n+m} = B.

힌트

Wyjaśnienie przykładów: Pierwszy test przykładowy odpowiada przykładowym operacjom opisanym w treści zadania. W drugim przypadku nie trzeba robić żadnej operacji, gdyż A_n=BA\_n = B.

예제2

  1. 예제 1

    입력
    7 4
    1 2 4 6
    
    예상 출력
    8
    1 5 7
    2 2 3
    3 8
    2 10 8
    3 3
    1 12 12
    2 10 13
    1 9 14
    
  2. 예제 2

    입력
    3 1
    3
    
    예상 출력
    0