You are an expert competitive programmer. You will be given a problem statement, test case constraints and example test inputs and outputs. Please reason step by step about the solution (that must respect memory and time limits), then provide a complete implementation in c++17.

Your solution must read input from standard input (cin), write output to standard output (cout).
Do not include any debug prints or additional output.

Put your final solution within a single code block:
```cpp
<your code here>
```

Execution time limit: 2.0 seconds
Memory limit: 512.0 MB

# Problem
Ada operates a network that consists of $$$n$$$ servers and $$$m$$$ direct connections between them. Each direct connection between a pair of distinct servers allows bidirectional transmission of information between these two servers. Ada knows that these $$$m$$$ direct connections allow to directly or indirectly transmit information between any two servers in this network. We say that server $$$v$$$ is a neighbor of server $$$u$$$ if there exists a direct connection between these two servers.

Ada needs to configure her network's WRP (Weird Routing Protocol). For each server $$$u$$$ she needs to select exactly one of its neighbors as an auxiliary server $$$a(u)$$$. After all $$$a(u)$$$ are set, routing works as follows. Suppose server $$$u$$$ wants to find a path to server $$$v$$$ (different from $$$u$$$).

1. Server $$$u$$$ checks all of its direct connections to other servers. If it sees a direct connection with server $$$v$$$, it knows the path and the process terminates.
2. If the path was not found at the first step, server $$$u$$$ asks its auxiliary server $$$a(u)$$$ to find the path.
3. Auxiliary server $$$a(u)$$$ follows this process starting from the first step.
4. After $$$a(u)$$$ finds the path, it returns it to $$$u$$$. Then server $$$u$$$ constructs the resulting path as the direct connection between $$$u$$$ and $$$a(u)$$$ plus the path from $$$a(u)$$$ to $$$v$$$.

As you can see, this procedure either produces a correct path and finishes or keeps running forever. Thus, it is critically important for Ada to configure her network's WRP properly.

Your goal is to assign an auxiliary server $$$a(u)$$$ for each server $$$u$$$ in the given network. Your assignment should make it possible to construct a path from any server $$$u$$$ to any other server $$$v$$$ using the aforementioned procedure. Or you should report that such an assignment doesn't exist.

## Input Format
The first line of the input contains two integers $$$n$$$ and $$$m$$$ ($$$2 \leq n \leq 20$$$, $$$n - 1 \leq m \leq \frac{n \cdot (n - 1)}{2}$$$) — the number of servers and the number of direct connections in the given network.

Then follow $$$m$$$ lines containing two integers $$$u_i$$$ and $$$v_i$$$ ($$$1 \leq u_i, v_i \leq n$$$, $$$u_i \ne v_i$$$) each, the $$$i$$$-th line describes the $$$i$$$-th direct connection.

It is guaranteed that there is no more than one direct connection between any two servers. It is guaranteed that there is a direct or indirect route (consisting only of the given direct connections) between any two servers.

## Output Format
If there is no way to assign an auxiliary server $$$a(u)$$$ for each server $$$u$$$ in such a way that WRP will be able to find a path from any server $$$u$$$ to any other server $$$v$$$, print "No" in the only line of the output.

Otherwise, print "Yes" in the first line of the output. In the second line of the output print $$$n$$$ integers, the $$$i$$$-th of these integers should be equal to $$$a(i)$$$ – the index of the auxiliary server for server $$$i$$$. Do not forget that there must be a direct connection between server $$$i$$$ and server $$$a(i)$$$.

You can output the answer in any case (upper or lower). For example, the strings "yEs", "yes", "Yes", and "YES" will be recognized as positive responses.

## Examples
```input
6 7
1 2
2 3
3 1
4 5
5 6
4 6
2 5
```
```output
Yes
2 5 2 5 2 5
```
-----
```input
3 2
1 2
2 3
```
```output
Yes
2 1 2
```
-----
```input
4 4
1 3
2 3
4 1
4 2
```
```output
Yes
3 3 1 1
```
-----
```input
6 5
1 2
2 3
3 4
4 5
5 6
```
```output
No
```

Now solve the problem and return the code.