/// kAAzuki Hoshino
/*
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma GCC optimize("unroll-loops")
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
#define int long long
typedef long long ll;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>ordered_set;
typedef long double ld;
typedef vector<int> vi;
typedef pair<int,int> pi;
typedef vector<pi> vpi;
//#define inf 1000000000
#define mod 1000000007
#define dmp(x) cerr<<"line "<<__LINE__<<" "<<#x<<":"<<x<<endl
#define fs first
#define sc second
#define pb push_back
#define all(c) (c).begin(),(c).end()
#define mt make_tuple
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
template<class S,class T> ostream& operator<<(ostream& o,const pair<S,T> &p){
    return o<<"("<<p.fs<<","<<p.sc<<")";
}
template<class T> ostream& operator<<(ostream& o,const vector<T> &vc){
    o<<"{";
    for(const T& v:vc) o<<v<<",";
    o<<"}";
    return o;
}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const int MAXM = 200005;
const int MAXN = 1005;
int used[MAXM], condition[MAXM], vis[MAXN][MAXN], a[MAXM], b[MAXM] ;
vi adj[MAXN];
int N,M;
int r[MAXN];

void dfs(int s, int base){
	if(vis[base][s])return;
	vis[base][s]=1;
	for(auto t:adj[s]){
		dfs(t, base);
	}
}

void bfs(int s){
	memset(used,0,sizeof(used));
	memset(r,-1,sizeof(r));
	for(auto t:adj[s]){
		if(r[t]!=-1){
			used[t]=1;
			continue;
		}
		queue<int> q;
		q.push(t);
		while(!q.empty()){
			int v = q.front();q.pop();
			r[v] = t;
			for(auto u:adj[v]){
				if(u==s)continue;
				if(r[u]!=-1){
					if(r[u]!=t)used[u]=1;
					continue;
				}
				q.push(u);
			}
		}
	}
	queue<int> q;
	for(int i=1;i<=N;i++)if(used[i])q.push(i);
	while(!q.empty()){
		int v = q.front();q.pop();
		used[v]=1;
		for(auto t:adj[v]){
			if(t==s)continue;
			if(used[t])continue;
			q.push(t);
		}
	}
	for(int i=1;i<=M;i++){
		if(a[i]==s){
			condition[i] = used[b[i]];
		}
	}

}

signed main(){
IOS;
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
	
	cin >> N >> M;
  for(int i=1;i<=M;i++){
  	cin >> a[i] >> b[i];
  	adj[a[i]].pb(b[i]);
  }  
  for(int i=1;i<=N;i++){
  	dfs(i, i);
  }
  for(int i=1;i<=N;i++){
  	bfs(i);
  }
  for(int i=1;i<=M;i++){
  	if(condition[i]==vis[b[i]][a[i]]){
  		cout << "same" << endl;
  	}
  	else cout << "diff" << endl;
  }

return 0;
}
///....
