#include <iostream>
using namespace std;
class Node {
public:
Node* next;
int id;
Node(int id, Node* next) : id(id), next(next) {}
};
Node* FindLoopBegin(Node *head) {
Node *slowptr = head,*fastptr = head;
bool LoopExists = false;
while(slowptr && fastptr){
fastptr = fastptr->next;
//if(fastptr == slowptr) {LoopExists = true;break;}
if(fastptr == NULL) {LoopExists = false; return NULL;}
fastptr = fastptr->next;
slowptr = slowptr->next;
if(fastptr == slowptr) {LoopExists = true;break;}
}
if(LoopExists) {
slowptr = head;
while(slowptr != fastptr){
slowptr = slowptr->next;
fastptr = fastptr->next;
}
return slowptr;
}
return NULL;
}
int main()
{
Node* n10 = new Node(10,NULL);
Node* n12 = new Node(12,NULL);
Node* n14 = new Node(14,NULL);
n12->next = n14;
n14->next = n12;
n10->next = n12;
cout<<(FindLoopBegin(n10)->id)<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIE5vZGUgewpwdWJsaWM6CiAgICBOb2RlKiBuZXh0OwogICAgaW50IGlkOwogICAgTm9kZShpbnQgaWQsIE5vZGUqIG5leHQpIDogaWQoaWQpLCBuZXh0KG5leHQpIHt9CiAgICAKfTsKCk5vZGUqIEZpbmRMb29wQmVnaW4oTm9kZSAqaGVhZCkgewogICAgTm9kZSAqc2xvd3B0ciA9IGhlYWQsKmZhc3RwdHIgPSBoZWFkOwogICAgYm9vbCBMb29wRXhpc3RzID0gZmFsc2U7CiAgICB3aGlsZShzbG93cHRyICYmIGZhc3RwdHIpewogICAgICAgIGZhc3RwdHIgPSBmYXN0cHRyLT5uZXh0OwogICAgICAgIC8vaWYoZmFzdHB0ciA9PSBzbG93cHRyKSB7TG9vcEV4aXN0cyA9IHRydWU7YnJlYWs7fQogICAgICAgIGlmKGZhc3RwdHIgPT0gTlVMTCkge0xvb3BFeGlzdHMgPSBmYWxzZTsgcmV0dXJuIE5VTEw7fQogICAgICAgIGZhc3RwdHIgPSBmYXN0cHRyLT5uZXh0OwogICAgICAgIHNsb3dwdHIgPSBzbG93cHRyLT5uZXh0OwogICAgICAgIGlmKGZhc3RwdHIgPT0gc2xvd3B0cikge0xvb3BFeGlzdHMgPSB0cnVlO2JyZWFrO30KICAgIH0KICAgIGlmKExvb3BFeGlzdHMpIHsKICAgICAgICBzbG93cHRyID0gaGVhZDsKICAgICAgICB3aGlsZShzbG93cHRyICE9IGZhc3RwdHIpewogICAgICAgICAgICBzbG93cHRyID0gc2xvd3B0ci0+bmV4dDsKICAgICAgICAgICAgZmFzdHB0ciA9IGZhc3RwdHItPm5leHQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzbG93cHRyOwogICAgfSAgIAogICAgcmV0dXJuIE5VTEw7Cn0KCmludCBtYWluKCkKewogICBOb2RlKiBuMTAgPSBuZXcgTm9kZSgxMCxOVUxMKTsKICAgTm9kZSogbjEyID0gbmV3IE5vZGUoMTIsTlVMTCk7CiAgIE5vZGUqIG4xNCA9IG5ldyBOb2RlKDE0LE5VTEwpOwogICBuMTItPm5leHQgPSBuMTQ7CiAgIG4xNC0+bmV4dCA9IG4xMjsKICAgbjEwLT5uZXh0ID0gbjEyOwogICBjb3V0PDwoRmluZExvb3BCZWdpbihuMTApLT5pZCk8PGVuZGw7CiAgIHJldHVybiAwOwp9