#include<iostream>
#include<vector>
using namespace std;
const int N=1e5+2;
bool used[N];
pair<int,int> edge_lis[N];
int deg[N],level[N];
vector<pair<int,int> > adj[N];
void dfs(int x,int idx){
	for(int i=0;i<adj[x].size();i++){
		if(!used[adj[x][i].first]){
			used[adj[x][i].first]=true;
			level[adj[x][i].first]=level[x]+1;
			dfs(adj[x][i].first,adj[x][i].second);
		}
		else{
			if(level[adj[x][i].first]<level[x]-1){
				if(edge_lis[adj[x][i].second].first!=x){
					swap(edge_lis[adj[x][i].second].first,edge_lis[adj[x][i].second].second);
				}
				deg[x]++;
			}
		}
	}
	//cout<<x<<" "<<deg[x]<<endl;
	if(deg[x]&1){
		if(edge_lis[idx].first!=x){
			swap(edge_lis[idx].first,edge_lis[idx].second);
		}
		deg[x]++;
	}
	else{
		if(edge_lis[idx].first==x){
			swap(edge_lis[idx].first,edge_lis[idx].second);
		}
		deg[edge_lis[idx].first]++;
	}
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n,m,i,j,k,l;
	cin>>n>>m;
	if(m&1){
		cout<<-1;
		return 0;
	}
	for(i=1;i<=m;i++){
		cin>>j>>k;
		edge_lis[i].first=j;
		edge_lis[i].second=k;
		adj[j].push_back({k,i});
		adj[k].push_back({j,i});
	}
	used[1]=true;
	dfs(1,0);
	for(i=1;i<=m;i++){
		cout<<edge_lis[i].first<<' '<<edge_lis[i].second<<'\n';
	}
}