Verificare se il Grafo è Bipartito

Un grafo si definisce bipartito quando è possibile colorarlo con due colori in modo che nessun paio di vertici adiacenti condivida lo stesso colore.

Stabilire se un grafo è bipartito può aiutare a identificare strutture e proprietà particolari, consentendo di risolvere in modo efficiente problemi in ambiti come la pianificazione, l’allocazione delle risorse e la risoluzione di conflitti. Inoltre, i grafi bipartiti permettono di sfruttare algoritmi più semplici e ottimizzazioni in attività come il matching massimo (maximum matching) e la colorazione dei grafi (graph coloring).

Vi viene fornito un grafo non orientato con v vertici e e spigoli. È richiesto di verificare se il grafo è bipartito oppure no.

Input

La prima riga dell’input contiene due interi v (1 ≤ v ≤ 100 000) ed e (1 ≤ e ≤ 100 000).

Le successive e righe contengono coppie di interi v1, v2 (1 ≤ v1, v2 ≤ v). Ciò significa che il vertice v1 è connesso al vertice v2 e viceversa.

Output

Il programma deve stampare Yes se il grafo in questione è bipartito, altrimenti deve stampare No.

Esempi

Input

Output

2 1 2 1

Yes

3 2 2 1 1 3

Yes

3 3 1 2 1 3 2 3

No

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue