#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
struct node
{
int nodeNumber;
int childCount;
struct node** childArray;
};
typedef struct node Node;
struct input
{
int start;
int end;
struct input* next;
};
typedef struct input Input;
int PrintLoop(int array[],int currentCount,int maxLength,Node* head)
{
int currentNode = head->nodeNumber;
int i = 0,j=0,k=-1;
for(i=0;i<maxLength;i++)
{
}
for(i=0;i<currentCount;i++)
{
if(array[i]==currentNode)
break;
}
if(i==currentCount)
{
array[i] = currentNode;
currentCount++;
for(j=0;j<head->childCount;j++)
{
k = PrintLoop(array,currentCount,maxLength,head->childArray[j]);
if(k==1)
break;
}
}
else
{
int minIndex = i,l=i;
int minNumber = array[i];
while(l<currentCount)
{
if(array[l]<minNumber)
{
minIndex = l;
minNumber = array[l];
}
l++;
}
if(minIndex!=currentCount-1)
{
l = minIndex+1;
}
else
{
l = i;
}
while(l!=minIndex)
{
if(l!=currentCount-1)
{
l++;
}
else
{
l = i;
}
}
k = 1;
}
return k;
}
int main(void)
{
int i,j;
Input *inputHead=NULL,*tempInput=NULL,*lastInput=NULL;
int input;
Node
** nodeArray
= (Node
**)malloc(input
*sizeof(Node
*)); for(i=0;i<input;i++)
{
Node
* temp
= (Node
*)malloc(sizeof(Node
)); temp->nodeNumber = 0;
temp->childCount = 0;
temp->childArray = NULL;
nodeArray[i] = temp;
}
i=0;
while(i!=-1)
{
if(i!=-1)
{
tempInput
= (Input
*)malloc(sizeof(Input
)); tempInput->start = i;
nodeArray[i]->childCount++;
tempInput->next=NULL;
tempInput->end = i;
if(inputHead==NULL)
{
inputHead = tempInput;
lastInput = tempInput;
}
else
{
lastInput->next = tempInput;
lastInput = tempInput;
}
}
}
for(i=0;i<input;i++)
{
nodeArray
[i
]->childArray
= (Node
**)malloc(nodeArray
[i
]->childCount
*sizeof(Node
*)); nodeArray[i]->nodeNumber = nodeArray[i]->childCount-1;
}
while(inputHead!=NULL)
{
tempInput = inputHead;
nodeArray[tempInput->start]->childArray[nodeArray[tempInput->start]->nodeNumber] = nodeArray[tempInput->end];
nodeArray[tempInput->start]->nodeNumber--;
inputHead = inputHead->next;
}
int *array
= (int*)malloc(input
*sizeof(int)); for(i=0;i<input;i++)
{
nodeArray[i]->nodeNumber = i;
array[i] = -1;
}
j=-1;
for(i=0;i<input;i++)
{
j = PrintLoop(array,0,input,nodeArray[i]);
if(j==1)
{
break;
}
}
if(j==-1)
{
}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8bWFsbG9jLmg+CiNpbmNsdWRlPHN0ZGxpYi5oPgoKc3RydWN0IG5vZGUKewppbnQgbm9kZU51bWJlcjsKaW50IGNoaWxkQ291bnQ7CnN0cnVjdCBub2RlKiogY2hpbGRBcnJheTsKfTsKCnR5cGVkZWYgc3RydWN0IG5vZGUgTm9kZTsKCnN0cnVjdCBpbnB1dAp7CmludCBzdGFydDsKaW50IGVuZDsKc3RydWN0IGlucHV0KiBuZXh0Owp9OwoKdHlwZWRlZiBzdHJ1Y3QgaW5wdXQgSW5wdXQ7CgppbnQgUHJpbnRMb29wKGludCBhcnJheVtdLGludCBjdXJyZW50Q291bnQsaW50IG1heExlbmd0aCxOb2RlKiBoZWFkKQp7CglpbnQgY3VycmVudE5vZGUgPSBoZWFkLT5ub2RlTnVtYmVyOwoJaW50IGkgPSAwLGo9MCxrPS0xOwoJZm9yKGk9MDtpPG1heExlbmd0aDtpKyspCgl7CgkJcHJpbnRmKCIlZFx0IixhcnJheVtpXSk7Cgl9CglwcmludGYoIlxuXG4iKTsKCWZvcihpPTA7aTxjdXJyZW50Q291bnQ7aSsrKQoJewoJCWlmKGFycmF5W2ldPT1jdXJyZW50Tm9kZSkKCQkJYnJlYWs7Cgl9CglpZihpPT1jdXJyZW50Q291bnQpCgl7CgkJYXJyYXlbaV0gPSBjdXJyZW50Tm9kZTsKCQljdXJyZW50Q291bnQrKzsKCQlmb3Ioaj0wO2o8aGVhZC0+Y2hpbGRDb3VudDtqKyspCgkJewkJCgkJCWsgPSBQcmludExvb3AoYXJyYXksY3VycmVudENvdW50LG1heExlbmd0aCxoZWFkLT5jaGlsZEFycmF5W2pdKTsKCQkJaWYoaz09MSkKCQkJCWJyZWFrOwoJCX0KCX0KCWVsc2UKCXsKCQlpbnQgbWluSW5kZXggPSBpLGw9aTsKCQlpbnQgbWluTnVtYmVyID0gYXJyYXlbaV07CgkJd2hpbGUobDxjdXJyZW50Q291bnQpCgkJewoJCQlpZihhcnJheVtsXTxtaW5OdW1iZXIpCgkJCXsKCQkJCW1pbkluZGV4ID0gbDsKCQkJCW1pbk51bWJlciA9IGFycmF5W2xdOwoJCQl9CgkJCWwrKzsJCgkJfQoJCQoJCXByaW50ZigiJWQiLG1pbk51bWJlcik7CgkJaWYobWluSW5kZXghPWN1cnJlbnRDb3VudC0xKQoJCXsKCQkJbCA9IG1pbkluZGV4KzE7CgkJfQoJCWVsc2UKCQl7CgkJCWwgPSBpOwoJCX0KCgkJCQkKCgkJd2hpbGUobCE9bWluSW5kZXgpCgkJewoJCQlwcmludGYoIi0+JWQiLGFycmF5W2xdKTsKCQkJaWYobCE9Y3VycmVudENvdW50LTEpCgkJCXsKCQkJCWwrKzsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWwgPSBpOwoJCQl9CgkJfQoJCXByaW50ZigiLT4lZCIsYXJyYXlbbF0gKTsKCQlrID0gMTsKCX0KcmV0dXJuIGs7Cn0KCgppbnQgbWFpbih2b2lkKQp7CglpbnQgaSxqOwoJSW5wdXQgKmlucHV0SGVhZD1OVUxMLCp0ZW1wSW5wdXQ9TlVMTCwqbGFzdElucHV0PU5VTEw7CglpbnQgaW5wdXQ7CglzY2FuZigiJWQiLCZpbnB1dCk7CglOb2RlKiogbm9kZUFycmF5ID0gKE5vZGUqKiltYWxsb2MoaW5wdXQqc2l6ZW9mKE5vZGUqKSk7Cglmb3IoaT0wO2k8aW5wdXQ7aSsrKQoJewoJCU5vZGUqIHRlbXAgPSAoTm9kZSopbWFsbG9jKHNpemVvZihOb2RlKSk7CgkJdGVtcC0+bm9kZU51bWJlciA9IDA7CgkJdGVtcC0+Y2hpbGRDb3VudCA9IDA7CgkJdGVtcC0+Y2hpbGRBcnJheSA9IE5VTEw7CgkJbm9kZUFycmF5W2ldID0gdGVtcDsKCX0KCQoJaT0wOwoJd2hpbGUoaSE9LTEpCgl7CgkJc2NhbmYoIiVkIiwmaSk7CgkJaWYoaSE9LTEpCgkJewoJCQl0ZW1wSW5wdXQ9IChJbnB1dCopbWFsbG9jKHNpemVvZihJbnB1dCkpOwoJCQl0ZW1wSW5wdXQtPnN0YXJ0ID0gaTsKCQkJbm9kZUFycmF5W2ldLT5jaGlsZENvdW50Kys7CgkJCXRlbXBJbnB1dC0+bmV4dD1OVUxMOwoJCQlzY2FuZigiJWQiLCZpKTsKCQkJdGVtcElucHV0LT5lbmQgPSBpOwoKCQkJaWYoaW5wdXRIZWFkPT1OVUxMKQoJCQl7CgkJCQlpbnB1dEhlYWQgPSB0ZW1wSW5wdXQ7CgkJCQlsYXN0SW5wdXQgPSB0ZW1wSW5wdXQ7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlsYXN0SW5wdXQtPm5leHQgPSB0ZW1wSW5wdXQ7CgkJCQlsYXN0SW5wdXQgPSB0ZW1wSW5wdXQ7CgkJCX0KCQl9CgoJfQoKCWZvcihpPTA7aTxpbnB1dDtpKyspCgl7CgkJbm9kZUFycmF5W2ldLT5jaGlsZEFycmF5ID0gKE5vZGUqKiltYWxsb2Mobm9kZUFycmF5W2ldLT5jaGlsZENvdW50KnNpemVvZihOb2RlKikpOwoJCW5vZGVBcnJheVtpXS0+bm9kZU51bWJlciA9IG5vZGVBcnJheVtpXS0+Y2hpbGRDb3VudC0xOwoJfQoKCXdoaWxlKGlucHV0SGVhZCE9TlVMTCkKCXsKCQl0ZW1wSW5wdXQgPSBpbnB1dEhlYWQ7CgkJbm9kZUFycmF5W3RlbXBJbnB1dC0+c3RhcnRdLT5jaGlsZEFycmF5W25vZGVBcnJheVt0ZW1wSW5wdXQtPnN0YXJ0XS0+bm9kZU51bWJlcl0gPSBub2RlQXJyYXlbdGVtcElucHV0LT5lbmRdOwoJCW5vZGVBcnJheVt0ZW1wSW5wdXQtPnN0YXJ0XS0+bm9kZU51bWJlci0tOwoJCWlucHV0SGVhZCA9IGlucHV0SGVhZC0+bmV4dDsKCQlmcmVlKHRlbXBJbnB1dCk7Cgl9CglpbnQgKmFycmF5ID0gKGludCopbWFsbG9jKGlucHV0KnNpemVvZihpbnQpKTsKCWZvcihpPTA7aTxpbnB1dDtpKyspCgl7CgkJbm9kZUFycmF5W2ldLT5ub2RlTnVtYmVyID0gaTsKCQlhcnJheVtpXSA9IC0xOwoJfQoJaj0tMTsKCWZvcihpPTA7aTxpbnB1dDtpKyspCgl7CgkJaiA9IFByaW50TG9vcChhcnJheSwwLGlucHV0LG5vZGVBcnJheVtpXSk7CgkJaWYoaj09MSkKCQl7CgkJCWJyZWFrOwoJCX0KCX0KCglpZihqPT0tMSkKCXsKCQlwcmludGYoIk5vIExvb3AiKTsKCX0KCXJldHVybiAwOwp9Cg==