#include<bits/stdc++.h>
using namespace std;

#define rep(i,n) for(int i=0;i<(n);i++)
#define REP(i,n) for(int i=1;i<=(n);i++)
#define mp make_pair
#define pb push_back
#define fst first
#define snd second
typedef long long ll;
typedef pair<int,int> pii;

const int maxn=1005;
const int maxm=200005;
int n,m,ql,qr;
vector<pii>dat[maxn];
bitset<maxn>edge[maxn],val1[maxn],val2,vis,cur;
int que[maxn];
bool ans[maxm];

void bfs(){
	while(ql<qr){
		int x=que[ql++];
		cur=~vis&edge[x];
		int y=-1;
		for(;;){
			y=cur._Find_next(y);
			if(y==maxn)break;
			vis[y]=1;
			que[qr++]=y;
		}
	}
}

int main(){
	scanf("%d%d",&n,&m);
	rep(i,m){
		int u,v;
		scanf("%d%d",&u,&v);
		u--;v--;
		edge[u][v]=1;
		dat[u].pb(mp(v,i));
	}
	rep(i,n){
		ql=qr=0;
		vis=0;
		vis[i]=1;
		que[qr++]=i;
		bfs(); 
		val1[i]=vis;
	}
	rep(i,n){
		val2=0;
		ql=qr=0;
		vis=0;
		vis[i]=1;
		rep(j,int(dat[i].size())){
			int k=dat[i][j].fst;
			if(vis[k])val2[k]=1;
			vis[k]=1;
			que[qr++]=k;
			bfs();
		}
		ql=qr=0;
		vis=0;
		vis[i]=1;
		for(int j=int(dat[i].size())-1;j>=0;j--){
			int k=dat[i][j].fst;
			if(vis[k])val2[k]=1;
			vis[k]=1;
			que[qr++]=k;
			bfs();
		}
		rep(j,int(dat[i].size())){
			int k=dat[i][j].fst;
			ans[dat[i][j].snd]=(val1[k][i]!=val2[k]);
		}
	}
	rep(i,m)puts(ans[i]?"diff":"same");
	return 0;
}