Cod sursa(job #1835)
#include<stdio.h>
#define fin "harta.in"
#define fout "harta.out"
#define NMAX 101
int n,m,grad[NMAX][2],v[NMAX][NMAX];
FILE *in,*out;
//0 ext, 1 int
int main() {
int i,j,ap[NMAX];
in=fopen(fin,"r"); out=fopen(fout,"w");
fscanf(in,"%i",&n);
for (i=1;i<=n;++i) fscanf(in,"%i%i",&grad[i][0],&grad[i][1]);
for (i=1;i<=n;++i) {
for (j=1;j<=n;++j) ap[j]=0;
for (j=i+1;j<=n && grad[i][0];++j)
if (grad[j][1]) {
v[i][j]=1;
++m;
grad[j][1]--;
grad[i][0]--;
ap[j]=1;
}
for (j=i+1;j<=n && grad[i][1];++j)
if (grad[j][0] && !ap[j]) {
v[j][i]=1;
++m;
grad[j][0]--;
grad[i][1]--;
}
}
fprintf(out,"%i\n",m);
for (i=1;i<=n;i++)
for (j=1;j<=n;++j)
if (v[i][j])
fprintf(out,"%i %i\n",i,j);
fclose(in); fclose(out);
return 0;
}