#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define MAXHASH 262144
#define KOLMY 100000
int zadani,policistu,poruseni;
int aktual[MAXHASH];
int hx1[MAXHASH];
int hx2[MAXHASH];
int hy1[MAXHASH];
int hy2[MAXHASH];

int polvesmeru[MAXHASH];
int kteri[MAXHASH][10];
int kde[MAXHASH];
int polx[512];
int poly[512];
int jestejny(double d1,double d2) {
  if (d1-d2>1e-8) return 0;
  if (d2-d1>1e-8) return 0;
  return 1;
  }
int nsd(int p,int q) {
  if (p<0) p=-p;
  if (q<0) q=-q;
  while (p&&q) {
    if (p>q) p%=q; else q%=p;
    }
  return p+q;
  }
void zahashuj(int m,int n) {
  int a,b,c;
  int _x1,_x2,_y1,_y2;
  if (polx[m]==polx[n]) {
    _x1=_x2=polx[m];
    _y1=0; _y2=1;
    }
  else
  if (poly[m]==poly[n]) {
    _y1=_y2=poly[m];
    _x1=0; _x2=1;
    }
  else {
    c=nsd(polx[m]-polx[n],poly[m]-poly[n]);
    a=(polx[m]-polx[n])/c;
    b=(poly[m]-poly[n])/c;
    if (a<0) { a=-a; b=-b; }
    _x1=polx[m]-a*(polx[m]/a);
    _y1=poly[m]-b*(polx[m]/a);
    _x2=_x1+a;
    _y2=_y1+b;
    }
  /*printf("(%d,%d),(%d,%d)->%lf,%lf\n",polx[m],poly[m],polx[n],poly[n],y,smer);*/
  a=(_x1+(_x2<<2)+(_y1<<4)+(_y2<<4))&(MAXHASH-1);
  for (;aktual[a]==zadani;) {
    if (hx1[a]==_x1&&hx2[a]==_x2&&hy1[a]==_y1&&hy2[a]==_y2) break;
    a=(a+1)&(MAXHASH-1);
    }
  if (aktual[a]!=zadani) {
    aktual[a]=zadani;
    hx1[a]=_x1;
    hx2[a]=_x2;
    hy1[a]=_y1;
    hy2[a]=_y2;
    polvesmeru[a]=2;
    kteri[a][0]=m;
    kteri[a][1]=n;
    }
  else {
    if (polvesmeru[a]==2) {
      kde[poruseni++]=a;
      }
    for (b=0;b<polvesmeru[a]; b++) if (kteri[a][b]==m) break;
    if (b==polvesmeru[a]) kteri[a][polvesmeru[a]++]=m;
    for (b=0;b<polvesmeru[a]; b++) if (kteri[a][b]==n) break;
    if (b==polvesmeru[a]) kteri[a][polvesmeru[a]++]=n;
    }
  }
int mensi(int p,int q) {
  if (polx[p]<polx[q]) return 1;
  if (polx[p]>polx[q]) return -1;
  if (poly[p]<poly[q]) return 1;
  if (poly[p]>poly[q]) return -1;
  return 0;
  }
int cmpline(const void *p,const void *q) {
  int m=*((int *)p);
  int n=*((int *)q);
  int i;
  if (m==n) return 0;
  i=mensi(kteri[m][0],kteri[n][0]);	  
  if (i) return -i;
  i=mensi(kteri[m][1],kteri[n][1]);	  
  return -i;
  }
int main() {
  int i,j,k,l,m,n;
  for (i=0; i<MAXHASH; i++) aktual[i]=0;
  for (zadani=1;;zadani++) {
    scanf("%d %d",&m,&n);
    if (!(m&&n)) break;
    poruseni=0;
    for (policistu=0; m&&n; policistu++) {
      polx[policistu]=m; poly[policistu]=n;
      for (j=0; j<policistu; j++)
	if (polx[j]==m&&poly[j]==n) break;
      if (j==policistu)
	for (i=0; i<policistu; i++) zahashuj(i,policistu);
      else
	policistu--;
      scanf("%d %d",&m,&n);
      }
    for (i=0; i<poruseni; i++) {
      k=kde[i];
      for (j=0; j<polvesmeru[k]-1; j++)
	for (l=j+1; l<polvesmeru[k]; l++)
	  if (mensi(kteri[k][j],kteri[k][l])==-1) {
	    m=kteri[k][j]; kteri[k][j]=kteri[k][l]; kteri[k][l]=m;
            }
      }	    
    if (poruseni>1) qsort((void *)kde,poruseni,sizeof(int),cmpline);
    if (poruseni) {
      printf("Tito policiste porusuji smernici:\n");
      for (i=0; i<poruseni; i++) {
        k=kde[i];
        for (j=0; j<polvesmeru[k]; j++) printf("(%d,%d)",polx[kteri[k][j]],poly[kteri[k][j]]);
        printf("\n");
        }
      printf("\n");
      } 
    else
      printf("Smernice byla dodrzena.\n\n");
    }
  return 0;
  }
