codeforces1090D 思維題

D. Similar Arrays

time limit per test

1 second

memory limit per test

512 megabytes

input

standard input

output

standard output

Vasya had an array of nn integers, each element of the array was from 11 to nn . He chose mm pairs of different positions and wrote them down to a sheet of paper. Then Vasya compared the elements at these positions, and wrote down the results of the comparisons to another sheet of paper. For each pair he wrote either "greater", "less", or "equal".

After several years, he has found the first sheet of paper, but he couldn't find the second one. Also he doesn't remember the array he had. In particular, he doesn't remember if the array had equal elements. He has told this sad story to his informatics teacher Dr Helen.

She told him that it could be the case that even if Vasya finds his second sheet, he would still not be able to find out whether the array had two equal elements.

Now Vasya wants to find two arrays of integers, each of length nn . All elements of the first array must be distinct, and there must be two equal elements in the second array. For each pair of positions Vasya wrote at the first sheet of paper, the result of the comparison must be the same for the corresponding elements of the first array, and the corresponding elements of the second array.

Help Vasya find two such arrays of length nn , or find out that there are no such arrays for his sets of pairs.

Input

The first line of input contains two integers nn , mm  — the number of elements in the array and number of comparisons made by Vasya (1≤n≤1000001≤n≤100000 , 0≤m≤1000000≤m≤100000 ).

Each of the following mm lines contains two integers aiai , bibi  — the positions of the ii -th comparison (1≤ai,bi≤n1≤ai,bi≤n ; ai≠biai≠bi ). It's guaranteed that any unordered pair is given in the input at most once.

Output

The first line of output must contain "YES" if there exist two arrays, such that the results of comparisons would be the same, and all numbers in the first one are distinct, and the second one contains two equal numbers. Otherwise it must contain "NO".

If the arrays exist, the second line must contain the array of distinct integers, the third line must contain the array, that contains at least one pair of equal elements. Elements of the arrays must be integers from 11 to nn .

Examples

Input

 

1 0

Output

 

NO

Input

 

3 1
1 2

Output

 

YES
1 3 2 
1 3 1 

Input

 

4 3
1 2
1 3
2 4

Output

 

YES
1 3 4 2 
1 3 4 1 

題意:讓你構造你兩個長度爲n的數組a,b,有m對比較組合,a數組需要每一個每個數都小於n且每個數只出現一次,b數組需要這m對組合的大小關係和第一個相同。

思路:做的時候,認爲兩個位置有比較對的時候還可以微調可以滿足規則,沒有的話更可以,寫了好久理所當然的WA了,最後打完了,想了好久,想過用度從小到大的賦值爲1,2...n,或者最大的那個爲1,其他的從2 開始賦值,最後成功的WA了,看了了好多份別人的代碼,才知道需要找一個沒有比較對的讓a[i]=1,a[j]=2,b[i]=1,b[j]=1,其他的從3開始依次賦值就好了,剛看到的時候想不明白爲什麼,後來仔細想來想,發現也挺有道理的,這兩個沒有大小的比較,讓a爲1,2,b爲1,1,和其他的都是大於3的一定會比1,2大,大小一定全都會滿足,完美!,,但是這個我真特麼的想不到啊!!

代碼:

#include<stdio.h>
#include<string.h>
#include<cmath>
#include<stdlib.h>
#include<time.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<iterator>
#include<set>
#include<map>
#include<bitset>
#define ll long long
#define qq printf("QAQ\n");
using namespace std;
const int maxn=2e5+5;
const int inf=0x3f3f3f3f;
const ll linf=0x3f3f3f3f3f3f3f3f;
const int mod=1e9+7;
const double e=exp(1.0);
const double pi=acos(-1);
const double eps=1e-6;
set<int>s[maxn];
int a[maxn],b[maxn];
int main()
{
    int n,m,l,r;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d",&l,&r);
            if(l>r)swap(l,r);
            s[l].insert(r);
        }
        int f=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=i+1;j<=n;j++)
            {
                if(!s[i].count(j)){
                   //puts("YES");
                   f=1;
                    a[i]=1;a[j]=2;
                    b[i]=1;b[j]=1;

                    int now=3;
                    for(int k=n;k>=1;k--)
                        if(k!=i&&j!=k)a[k]=now,b[k]=now++;

                    puts("YES");
                    for(int i=1;i<=n;i++)
                    printf("%d%c",a[i],i==n?'\n':' ');
                    for(int i=1;i<=n;i++)
                    printf("%d%c",b[i],i==n?'\n':' ');
                    return 0;
                }
            }

        }
        puts("NO");
        }
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章