#include <fstream>
using std::ifstream;
using std::ofstream;
#include <vector>
using std::vector;
struct cerinta{
int x, y;
int tip; };
enum statut{
vine,
nu_vine,
nestiut };
bool creeaza_invitatii(
const int nr_prieteni,
vector<statut>& prieteni,
const int nr_cerinte,
const vector<cerinta>& cerinte,
const int i,
int& nr_invitati){
if(nr_invitati <= 0){
return false; }
if(i >= cerinte.size()){
return true; }
const int tip = cerinte[i].tip,
x = cerinte[i].x,
y = cerinte[i].y;
if(tip == 0){
if(prieteni[x] == vine || prieteni[y] == vine){
return creeaza_invitatii(
nr_prieteni,
prieteni,
nr_cerinte,
cerinte,
i + 1,
nr_invitati); }
else{
if(prieteni[x] == nestiut){
prieteni[x] = vine;
if(creeaza_invitatii(
nr_prieteni,
prieteni,
nr_cerinte,
cerinte,
i + 1,
nr_invitati)){
return true; }
else{
prieteni[x] = nestiut; } }
if(prieteni[y] == nestiut){
prieteni[y] = vine;
if(creeaza_invitatii(
nr_prieteni,
prieteni,
nr_cerinte,
cerinte,
i + 1,
nr_invitati)){
return true; }
else{
prieteni[y] = nestiut; } }
return false; } }
else if(tip == 1){
if(prieteni[x] == vine || prieteni[y] == nu_vine){
return creeaza_invitatii(
nr_prieteni,
prieteni,
nr_cerinte,
cerinte,
i + 1,
nr_invitati); }
else{
if(prieteni[x] == nestiut){
prieteni[x] = vine;
if(creeaza_invitatii(
nr_prieteni,
prieteni,
nr_cerinte,
cerinte,
i + 1,
nr_invitati)){
return true; }
else{
prieteni[y] = nestiut; } }
if(prieteni[y] == nestiut){
prieteni[y] = nu_vine;
--nr_invitati;
if(creeaza_invitatii(
nr_prieteni,
prieteni,
nr_cerinte,
cerinte,
i + 1,
nr_invitati)){
return true; }
else{
prieteni[y] = nestiut;
++nr_invitati; } }
return false; } }
else if(tip == 2){
if(prieteni[y] == vine || prieteni[x] == nu_vine){
return creeaza_invitatii(
nr_prieteni,
prieteni,
nr_cerinte,
cerinte,
i + 1,
nr_invitati); }
else{
if(prieteni[y] == nestiut){
prieteni[y] = vine;
if(creeaza_invitatii(
nr_prieteni,
prieteni,
nr_cerinte,
cerinte,
i + 1,
nr_invitati)){
return true; }
else{
prieteni[x] = nestiut; } }
if(prieteni[x] == nestiut){
prieteni[x] = nu_vine;
--nr_invitati;
if(creeaza_invitatii(
nr_prieteni,
prieteni,
nr_cerinte,
cerinte,
i + 1,
nr_invitati)){
return true; }
else{
prieteni[x] = nestiut;
++nr_invitati; } }
return false; } }
else if(tip == 3){
if(prieteni[x] == nu_vine || prieteni[y] == nu_vine){
return creeaza_invitatii(
nr_prieteni,
prieteni,
nr_cerinte,
cerinte,
i + 1,
nr_invitati); }
else{
if(prieteni[x] == nestiut){
prieteni[x] = nu_vine;
--nr_invitati;
if(creeaza_invitatii(
nr_prieteni,
prieteni,
nr_cerinte,
cerinte,
i + 1,
nr_invitati)){
return true; }
else{
prieteni[x] = nestiut;
++nr_invitati; } }
if(prieteni[y] == nestiut){
prieteni[y] = nu_vine;
--nr_invitati;
if(creeaza_invitatii(
nr_prieteni,
prieteni,
nr_cerinte,
cerinte,
i + 1,
nr_invitati)){
return true; }
else{
prieteni[y] = nestiut;
++nr_invitati; } }
return false; } } }
int main(){
ifstream f("party.in");
ofstream g("party.out");
int nr_prieteni = 0, nr_cerinte = 0;
f >> nr_prieteni >> nr_cerinte;
vector<statut> prieteni(nr_prieteni, nestiut);
vector<cerinta> cerinte(nr_cerinte);
for(int i = 0; i < nr_cerinte; ++i){
f >> cerinte[i].x >> cerinte[i].y >> cerinte[i].tip;
--cerinte[i].x;
--cerinte[i].y; }
int nr_invitati = nr_prieteni;
creeaza_invitatii(
nr_prieteni,
prieteni,
nr_cerinte,
cerinte,
0,
nr_invitati);
g << nr_invitati << '\n';
for(int i = 0; i < nr_prieteni; ++i){
if(prieteni[i] != nu_vine){
g << i+1 << '\n'; } }
return 0; }