#include<bits/stdc++.h>
using namespace std;
typedef long long inr;
typedef unsigned long long unr;
typedef long double onr;
#define fr(y) for(inr i=1;i<=y;i++,cout<<endl)
#define fr(a) for(inr i=1;i<=a;i++)
#define pb(a) push_back(a)
#define mp(a,b) make_pair(a,b)
#define fi first
#define se second
inr T,k,n,m,t1,t2,a[1005][1005],b[1005][1005];
vector<int>c1[1005];
vector<pair<int,int> >c2[1005];
vector<int> c3[1005];
vector<pair<int,int> >c4[1005];
int main() {
ios::sync_with_stdio(false);
cin>>n>>m>>t1>>t2;
if(t2==0) {
int u,v,fg1=0,fg2=0;
fr(m) {
cin>>u>>v;
if(a[u][v]==1) fg1=1;
if(u==v) fg2=1;
if(t1==0) {
a[u][v]=a[v][u]=1;
b[u][i]=b[v][i]=1;
c1[u].pb(v);
c1[v].pb(u);
} else {
a[u][v]=1;
b[u][i]=1,b[v][i]=-1;
c1[u].pb(v);
c3[v].pb(u);
}
}
if(!fg1) {
fr(n)
for(int j=1; j<=n; j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
if(!fg2) {
fr(n)
for(int j=1; j<=m; j++)
cout<<b[i][j]<<" ";
cout<<endl;
}
fr(n) {
for(int j=0; j<c1[i].size(); j++) cout<<c1[i][j]<<" ";
cout<<endl;
}
{
int num=0,A[1005],B[1005];
A[1]=1;
for(int i=2; i<=n+1; i++) {
A[i]=A[i-1]+c1[i-1].size();
}
fr(n) {
for(int j=0; j<c1[i].size(); j++) B[++num]=c1[i][j];
}
fr(n+1) cout<<A[i]<<" ";
cout<<endl;
fr(num) cout<<B[i]<<" ";
cout<<endl;
}
if(t1==1) {
int num=0,A[1005],B[1005];
A[1]=1;
for(int i=2; i<=n+1; i++) {
A[i]=A[i-1]+c3[i-1].size();
}
fr(n) {
for(int j=0; j<c3[i].size(); j++) B[++num]=c3[i][j];
}
fr(n+1) cout<<A[i]<<" ";
cout<<endl;
fr(num) cout<<B[i]<<" ";
cout<<endl;
}
}
else {
int u,v,d,fg1=0;
fr(m) {
cin>>u>>v>>d;
if(a[u][v]>0) fg1=1;
if(t1==0) {
a[u][v]=a[v][u]=d;
c2[u].pb(mp(v,d));
c2[v].pb(mp(u,d));
} else {
a[u][v]=d;
c2[u].pb(mp(v,d));
c4[v].pb(mp(u,d));
}
}
if(!fg1) {
fr(n)
for(int j=1; j<=n; j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
fr(n) {
for(int j=0; j<c2[i].size(); j++) cout<<c2[i][j].fi<<" "<<c2[i][j].se<<" ";
cout<<endl;
}
{
int num=0,A[1005],B[1005],Z[1005];
A[1]=1;
for(int i=2; i<=n+1; i++) {
A[i]=A[i-1]+c2[i-1].size();
}
fr(n) {
for(int j=0; j<c2[i].size(); j++) B[++num]=c2[i][j].fi,Z[num]=c2[i][j].second;
}
fr(n+1) cout<<A[i]<<" ";
cout<<endl;
fr(num) cout<<B[i]<<" ";
cout<<endl;
fr(num) cout<<Z[i]<<" ";
cout<<endl;
}
if(t1==1) {
int num=0,A[1005],B[1005],Z[1005];
A[1]=1;
for(int i=2; i<=n+1; i++) {
A[i]=A[i-1]+c4[i-1].size();
}
fr(n) {
for(int j=0; j<c4[i].size(); j++) B[++num]=c4[i][j].fi,Z[num]=c4[i][j].second;
}
fr(n+1) cout<<A[i]<<" ";
cout<<endl;
fr(num) cout<<B[i]<<" ";
cout<<endl;
fr(num) cout<<Z[i]<<" ";
cout<<endl;
}
}
return 0;
}