#include<bits/stdc++.h>
using namespace std;
using ll = long long;
signed main()
{
int n , m;
cin>>n>>m;
vector<int> t(m) , b(m);
vector<int> f(2 * n + 1 , -1);
vector<pair<int ,int>> ops;
for(int i = 0 ; i < m ; i++)
{
cin>>b[i]>>t[i];
}
stack<int> empty;
vector<int> nb(2 * n + 1);
for(int i = 0 ; i < m ; i++)
{
if(b[i] == 0)
{
empty.push(i);
continue;
}
if(b[i] == t[i])
continue;
if(f[t[i]] == -1)
{
if(empty.empty())
{
cout<<"-1\n";
return 0;
}
int l = empty.top();
empty.pop();
ops.push_back({l , i});
nb[t[i]]++;
f[t[i]] = l;
}
else
{
nb[t[i]]++;
ops.push_back({f[t[i]] , i});
}
if(f[b[i]] == -1)
{
nb[b[i]]++;
f[b[i]] = i;
}
else
{
nb[b[i]]++;
ops.push_back({f[b[i]] , i});
}
}
for(int i = 1 ; i <= 2 * n ; i++)
{
if(nb[i] != 2)
{
cout<<"-1\n";
return 0;
}
}
cout<<(int)ops.size()<<'\n';
for(auto [u , v] : ops)
{
cout<<u + 1<<" "<<v + 1<<'\n';
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |