#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
#define N 100010
#define NO !printf("-1\n")
typedef long long ll;
inline ll read(){
	ll x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=(x<<1)+(x<<3)+c-'0';
		c=getchar();
	}
	return x*f;
}
int n,m,vis[N],t[N],x[N],y[N];
int d[N];
vector<pair<int,int> > G[N];
void dfs1(int u){
	vis[u]=1;
	for(auto qwq:G[u]){
		int v=qwq.first;
		if(vis[v])continue;
		t[qwq.second]=1;
		dfs1(v);
	}
}
void dfs2(int u,int fa){
	for(auto qwq:G[u]){
		int v=qwq.first;
		if(!t[qwq.second]||v==fa)continue;
		dfs2(v,u);
	}
	if(!fa)return;
	if(d[u]&1){
		++d[u];
		printf("%d %d\n",u,fa);
	}
	else{
		++d[fa];
		printf("%d %d\n",fa,u);
	}
}
int main(){
	n=read(),m=read();
	if(m&1)return NO;
	for(int i=1;i<=m;++i){
		int u=read(),v=read();
		G[u].emplace_back(v,i);
		G[v].emplace_back(u,i);
		x[i]=u,y[i]=v;
	}
	dfs1(1);
	for(int i=1;i<=m;++i){
		if(!t[i]){
			printf("%d %d\n",x[i],y[i]);
			++d[x[i]];
		}
	}
	dfs2(1,0);
	return 0;
}


