小 Q 与异或
题号:NC219164
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

小 Q 在思考一个奇怪的问题,这个问题是这样的:请给出一个长度为  的序列 ,使其满足给出的  个式子。

其中第  个式子会给出两个参数 ,表示

为了使题目变得更加简单,其中对于每一个

如果没有一个序列都满足给出的  条柿子,请直接输出 

输入描述:

输入第一行有两个整数 ,表示序列的长度与式子的个数。

接下来  行,每行有两个整数,分别表示每个式子的参数

输出描述:

本题将会使用 Special Judge。
只有一行包含  个整数,表示序列
示例1

输入

复制
5 2
1 2
3 4

输出

复制
2 2 4 1 1

说明


示例2

输入

复制
6 1
2 4

输出

复制
6 2 4 3 1 4
示例3

输入

复制
2 2
1 2
2 2

输出

复制
-1

备注:

为了保证选手的做题体验,我们将会给出 spj 以及使用的步骤。

1.创建一个文件夹,然后创建一个 cpp,将给出的 spj 复制进 cpp 里。
2.再分别创建 1.in,1.out,1.ans,将要测试数据的输入复制进 1.in,答案输出复制进 1.ans,你的输出复制进 1.out。
3.然后直接运行保存 spj 的 cpp,spj 将会返回两行信息,其中第二行会返回一个数字,如果数字为 100,则答案正确,数字为 0,则答案错误。

#include <cstdlib>
#include <cmath>
#include <fstream>
#include <iostream>
using namespace std;

int score,n,m;
long long a[2000005],sum[2000005];

void Judge(){
    std::ifstream fin("1.in");
    std::ifstream fout("1.out");
    std::ifstream fans("1.ans");
    fin>>n,fin>>m; 
    int Ans=0;
    fans>>Ans;
    if(Ans==-1){
        fout>>a[1];
        if(a[1]!=-1){
            std::cerr <<"Your answer is wrong.You should print -1.";
            cout<<0<<endl;
        }else{
            std::cerr <<"OK! Accepted! So niu bi!";
            cout<<100<<endl;
        }
        return ;
    }
    for(int i=1;i<=n;i++){
        fout>>a[i];
        if(a[i]<1||a[i]>1ll*20000000000){
            std::cerr<<"Your number is out of range[1,2e10].";
            cout<<0<<endl;
            return ;
        }
        if(i==1)sum[i]=a[i];
        else sum[i]=sum[i-1]^a[i];
    }
    for(int i=1;i<=m;i++){
        int x,y;
        fin>>x,fin>>y;
        if(sum[x]!=y){
            std::cerr << "Your answer is wrong.";
            cout<<0<<endl;
            return ;
        }
    }
    std::cerr<<"OK! Accepted! So niu bi!";
    cout<<100<<endl;
}

int main(int argc, char* argv[]) {
    Judge();
}