Zbiory 2
시간 제한6초메모리 제한2048 MB
나눗셈으로 정의된 집합들에 합집합, 교집합, 여집합 연산을 최대 100,000번 적용해 주어진 목표 부분집합을 만든다.
문제
W tym zadaniu będziemy rozpatrywać ciąg podzbiorów zbioru . Zbiory są zdefiniowane następująco: wartość należy do zbioru wtedy i tylko wtedy, gdy jest podzielne przez .
Przykładowo dla kolejne zbiory są następujące:
Kolejnych zbiorów – – powstaje przez operacje sum, przecięć lub negacji na poprzednich zbiorach.
- Operacja sumy zbiorów oraz (oznaczana przez ) tworzy zbiór zawierający wszystkie liczby należące do któregokolwiek z lub .
- Operacja przecięcia zbiorów oraz (oznaczana przez ) tworzy zbiór zawierający wszystkie liczby należące do obu oraz .
- Operacja negacji zbioru (oznaczana przez ) tworzy zbiór zawierający wszystkie liczby całkowite , które nie należą do .
Przykładowy ciąg operacji może wyglądać następująco:
Mając daną liczbę oraz docelowy zbiór , Twoim zadaniem jest dobrać liczbę () oraz ciąg operacji, aby otrzymać zbiór równy zbiorowi . Da się udowodnić, że dla limitów z treści zadania da się skonstruować dowolny podzbiór , mieszcząc się w limicie operacji.
입력
W pierwszym wierszu wejścia znajdują się dwie liczby całkowite , (, ), oznaczające odpowiednio liczbę początkowych zbiorów oraz rozmiar zbioru docelowego . W drugim wierszu następuje ciąg liczb całkowitych (), zawierający elementy zbioru .
출력
W pierwszym wierszu wyjścia należy wypisać liczbę całkowitą (). W kolejnych wierszach powinny znajdować się opisy kolejnych operacji. Wiersz numer i, opisujący w jaki sposób powstał zbiór , powinien być jednej z trzech postaci:
1– oznaczającej operację sumy ,2– oznaczającej operację przecięcia ,3– oznaczającej operację negacji .
Ponadto, musi być spełnione .
힌트
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ż .