#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <bitset>
#include <vector>
#include <queue>
#define PB push_back
#define PII pair<int,int>
#define MP make_pair
#define fir first
#define sec second
#define ll long long
using namespace std;
template <class T>
inline void rd(T &x) {
	x=0; char c=getchar(); int f=1;
	while(!isdigit(c)){if(c=='-')f=-1; c=getchar();}
	while(isdigit(c)) x=x*10-'0'+c,c=getchar(); x*=f;
}
const int N=1010,M=1003;
bitset<M> G[N],A[N],B;
int n,m;
int vis[N][2];
int inq[N];
queue<int> que;
void push(int u,int t) {
	if(!vis[u][0]) vis[u][0]=t;
	else if(!vis[u][1]&&vis[u][0]!=t) vis[u][1]=t,B[u]=0;
	else return;
	A[t][u]=0;
	if(!inq[u]) que.push(u),inq[u]=1;
}
int mp[N][N],p1[N][N],p2[N][N];
void sol(int s) {
	B[s]=0;
	for(int i=1;i<=n;++i) if(mp[s][i]) push(i,i);
	while(!que.empty()) {
		int u=que.front(); que.pop(),inq[u]=0;
		while(1) {
			int v=((A[vis[u][0]]|A[vis[u][1]])&G[u]&B)._Find_first();
			if(v==M) break;
			push(v,vis[u][0]),push(v,vis[u][1]);
		}
	}
	for(int i=1;i<=n;++i) if(s!=i) {
		p1[s][i]=vis[i][0]||vis[i][1]||mp[s][i];
		p2[s][i]=(vis[i][0]&&vis[i][0]!=i)||(vis[i][1]&&vis[i][1]!=i);
	}
	for(int i=1;i<=n;++i) {
		if(vis[i][0]) A[vis[i][0]][i]=1,vis[i][0]=0;
		if(vis[i][1]) A[vis[i][1]][i]=1,vis[i][1]=0;
		B[i]=1;
	}
}
vector<PII> E;
int main() {
	rd(n),rd(m);
	for(int i=1,x,y;i<=m;++i) rd(x),rd(y),G[x][y]=mp[x][y]=1,E.PB(MP(x,y));
	for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) A[i][j]=1;
	for(int i=1;i<=n;++i) B[i]=1;
	for(int i=1;i<=n;++i) sol(i);
	for(int i=0;i<E.size();++i) { 
		int x=E[i].fir,y=E[i].sec,flg;
		if(p1[y][x]) flg=(p2[x][y]==1);
		else flg=(p2[x][y]==0);
		if(flg) printf("same\n");
		else printf("diff\n");
	}
	return 0;
}
	