ma super idee programmer comme un porc.. =)

ma super idee programmer comme un porc.. =) - C++ - Programmation

Marsh Posté le 21-01-2003 à 02:24:37    

voila le problem, je dois faire un prog qui recherche les nombres palindrome ( ex : 3223 ).0
on demarre en entrant un entier ex 17.
il vas additioner 17+71= 88 hop c un palindrome niveau 1.
bref, le problem arrive quand il y a de grands, tres grans chiffrs.
alors jai fait ca.
 
on entre notre entier qui est converti en char[]
on inverse dans une seconde char2[].
ja i ecrit un algotythme qui additionne caracter par caractere apres conversion de char vers int, si il y a une retenue il lagarde ect ....
 
ca marche a moitier , mais au moins je peu en mettre des chiffrs.
le probleme c que desfois il me sort une reponse avec des caracteres faux qui ne devrait pas etrre la.
exemple : 2332p, ou 126ñ
...
aidez moi a trouver le probleme.
 
ATTENTION C TRES MOCHE.
 

Code :
  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <cstdlib>
  5. using namespace std;
  6. void inverse(char b[]) {
  7. char save[500];
  8. char result [500];
  9. char resultf [500];
  10. char compare1[0];
  11. char compare2[0];
  12. int saveival,bival;
  13. int temp=0;
  14. int temp1=0;
  15. char tempch[0];
  16. strcpy(save,b);
  17. for(int i=0;i<(strlen(b));i++) {
  18. save[(strlen(b))-i-1] = b[i]; }
  19. cout << save<<"\n";
  20. for(int i=0; i<(strlen(b)); i++)   {
  21. compare1[0]= save[i];
  22. saveival = atoi (compare1);
  23. compare2[0]= b[i];
  24. bival = atoi (compare2);
  25. temp1 = saveival+bival;
  26. if (temp1+temp>9) {
  27. temp1 = (temp1+temp)%10;
  28. temp = 1;
  29. itoa (temp1,tempch,10);
  30. result[i] = tempch[0];
  31. cout << tempch << "\n"; }
  32. else {temp1 = (temp1+temp);
  33. itoa (temp1,tempch,10);
  34. result[i] = tempch[0];
  35. cout << tempch << "\n";        }
  36. }
  37. //if (temp==1){ strcat(result,"1" ); }
  38. cout << result << "\n";
  39. strcpy(resultf,result);
  40. for(int i=0;i<(strlen(result));i++) {
  41. resultf[(strlen(result))-i-1] = result[i]; }
  42. cout << resultf<<"\n";
  43. }
  44. int main() {
  45. string quit;
  46. char b[500];
  47. do {
  48. cout << "enter an integer number\n";
  49. cin >>b;
  50. inverse(b);
  51. cout << "do u wnna quit ?\n";
  52. cin >>quit;
  53. }
  54. while(quit!="y" );
  55. }

:cry:

Reply

Marsh Posté le 21-01-2003 à 02:24:37   

Reply

Marsh Posté le 21-01-2003 à 02:32:27    

tu veux pas utiliser GMP ? :o

Reply

Marsh Posté le 21-01-2003 à 02:35:27    

HappyHarry a écrit :

tu veux pas utiliser GMP ? :o


je peus pas. je vais pas rendre au prof une disquette  qui contient une librairy specifique, je fais qvce cce que je connais ou du moins ce qui disponible.
 
sinon les problemes de caracteres zarbs sa vient  dou ?

Reply

Marsh Posté le 21-01-2003 à 02:46:43    

euh ... joker, j'ai pas envie de lire ca a cette heure ci, désolé :sweat:
 
par contre itoa est pas trop standard ...

Reply

Marsh Posté le 21-01-2003 à 03:10:09    

De façon plus élégante.
Soit n le nombre à tester.
Tu détermines d'abord quelle est la plus grande puissance de 10 inférieure à n. Appelons la p.
 
1- Soit a = n % 10
2- Soit b = n / p
3- Si a == b,
p = p / 10
n = (n / 10) % p
on repart en 1
Sinon, le nombre n'est pas un palindrôme.
On arrête lorsque n est inférieur à 10. Dans ce cas le nombre est un palindrome.
 
Cette méthode n'utilise jamais de nombre plus grand que le nombre de départ, ce qui garantit qu'on ne débordera jamais. Attention cependant à la détection de la puissance de 10 supérieure, faire une comparaison entre la puissance de 10 et le nombre peut mener à une boucle infinie si on en vient à manipuler une puissance qui ne rentre pas dans le format d'entier utilisé.
Il n'y a pas de conversion, ni de fonctions qui dépendent de la représentation du nombre en mémoire.
 
Pour ceux qui rament : l'algorithme extrait de n le premier et le dernier digit, puis les compare. S'ils sont identiques, le nombre de départ est "tronqué" par un modulo et une division entière, et on réitère le processus.
 
A noter que l'algo peut être généralisé à n'importe quelle base assez facilement.


---------------
Loose Change Lies | Bars | Last.fm
Reply

Marsh Posté le 21-01-2003 à 03:21:01    

KrisCool a écrit :

De façon plus élégante.
Soit n le nombre à tester.
Tu détermines d'abord quelle est la plus grande puissance de 10 inférieure à n. Appelons la p.
 
1- Soit a = n % 10
2- Soit b = n / p
3- Si a == b,
p = p / 10
n = (n / 10) % p
on repart en 1
Sinon, le nombre n'est pas un palindrôme.
On arrête lorsque n est inférieur à 10. Dans ce cas le nombre est un palindrome.
 
Cette méthode n'utilise jamais de nombre plus grand que le nombre de départ, ce qui garantit qu'on ne débordera jamais. Attention cependant à la détection de la puissance de 10 supérieure, faire une comparaison entre la puissance de 10 et le nombre peut mener à une boucle infinie si on en vient à manipuler une puissance qui ne rentre pas dans le format d'entier utilisé.
Il n'y a pas de conversion, ni de fonctions qui dépendent de la représentation du nombre en mémoire.
 
Pour ceux qui rament : l'algorithme extrait de n le premier et le dernier digit, puis les compare. S'ils sont identiques, le nombre de départ est "tronqué" par un modulo et une division entière, et on réitère le processus.
 
A noter que l'algo peut être généralisé à n'importe quelle base assez facilement.


ok, mais avec ce que j ai fait plus haut n imporet que l nombre peut etre additionner, inverser a plus millions de caracters.
char [x] en fait.

Reply

Marsh Posté le 23-01-2003 à 03:46:20    

Citation :

Code :
  1. char compare1[0];


Explique moi:
-Ce que c'est censé être.
-Ce qu'en pense ton compilateur.
Parce que un tableau de taille nulle, c'est pas permis.
 

Citation :

Code :
  1. void inverse(char b[]) {
  2. char save[500];
  3. //...
  4. strcpy(save,b);
  5. for(int i=0;i<(strlen(b));i++)
  6.  save[(strlen(b))-i-1] = b[i];


Tu remplis d'abord save, pour ensuite le remplir...
Et puis il y a plus simple:

Code :
  1. #include <algorithm>
  2. //...
  3. void inverse(char b[]) {
  4. string save(b);
  5. reverse(save.begin(), save.end());


 
Problèmes:
Tu additionnes les chiffres de la gauche vers la droite... la retenue va dans le mauvais sens !
Tu ajoutes la retenue après le test de somme>9. Tu peux donc avoir le 'chiffre' 9+1= 10.
Tu ne mets pas la retenue à 0 dans le else !
 
Pas explicites tes noms.
Comment veux-tu voir les erreurs ?

b       -> nbr_nor
save    -> nbr_rev
result  -> sum
saveival-> digit_rev
bival   -> digit_nor
temp1   -> digit_sum

Tous les autres à la poubelle.
 
Je propose:

Code :
  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4. using namespace std;
  5. int digit2val(char char_digit){
  6. return char_digit - '0'; //pas garanti, mais ça ira !
  7. }
  8. char val2digit(int value){
  9. return '0'+value; //pas garanti, mais ça ira !
  10. }
  11. string sum_inverse(const string nbr_nor) {
  12. string sum(nbr_nor.size()+1, ' '); //+1 pour l'éventuelle retenue finale
  13. string nbr_rev(nbr_nor); //copier
  14. int carry=0; //retenue
  15. reverse(nbr_rev.begin(), nbr_rev.end());
  16. for(int i=nbr_nor.size()-1 ; i>=0 ; --i){
  17.   int val_digit_rev= digit2val(nbr_rev[i]);
  18.       int val_digit_nor= digit2val(nbr_nor[i]);
  19.       int digit_sum = val_digit_rev + val_digit_nor + carry;
  20.      
  21.       if (digit_sum > 9) {
  22.   digit_sum %= 10; //garder le dernier chiffre
  23.   carry = 1;
  24.  }else{
  25.   carry = 0;
  26.  }
  27.  sum[i+1] = val2digit(digit_sum); //-1: décalage pour l'éventuelle retenue finale
  28. }
  29. if (carry==1)
  30.  sum[0]= '1';
  31. return sum;
  32. }
  33. int main() {
  34. string in;
  35. for(;;){
  36.       cout << "Enter an integer number (0 to quit): " ;
  37.       cin >>in;
  38.  if(in == "0" ) break;
  39.       cout << sum_inverse(in) << endl;
  40. }
  41. return 0;
  42. }


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 23-01-2003 à 03:59:43    

j ai fait ca depuis, sa narche , pour 196 je me suis entraun de calculer 100000 iterations.
 

Code :
  1. #include <iostream.h>
  2. #include <string>
  3. #include <fstream>
  4. #include <cstdlib>
  5. #include <time.h>
  6. //number 196  have not been find yet after more than 13 million digits.
  7. //i calculate 12000 digits, asking te program to stop after 30000 iterations,
  8. //it tooks 2 minutes on an AMD 1500 mhz.
  9. //the method i am using is not the more effecient, special librairies permit to
  10. //use realy large integer represented on as much bits as we wants, which is
  11. //more faster than checking digits by digits .
  12. //i check my result using this website.
  13. //http://www.jasondoucette.com/worldrecords.html
  14. //????????????????????????????????????????????????????????????????????????//
  15. //                         Palindrome checking function                   //
  16. //????????????????????????????????????????????????????????????????????????//
  17. bool palindrome (string a) {
  18. int len= a.length();
  19. for(int i=0; i<len;i++){
  20. if((a[i]*1)!=(a[len-i-1]*1)) { return false; }
  21. else continue;
  22. }
  23. return true;
  24. }
  25. //????????????????????????????????????????????????????????????????????????//
  26. //                          Inverse string function                       //
  27. //????????????????????????????????????????????????????????????????????????//
  28. string inversestr (string source,string target) {
  29.        for(int i=0; i<(source.length());i++){
  30.        target[i]=source[(source.length())-i-1]; }
  31.        return target;
  32. }
  33. //????????????????????????????????????????????????????????????????????????//
  34. //                          Add digits string function                    //
  35. //????????????????????????????????????????????????????????????????????????//
  36. string process(string input) {
  37. string resultf,inverse;
  38. int tempa,tempinverse,tempresult;
  39. int temp=0;
  40. int len = input.length();
  41. inverse=input;
  42. string result(len,' ');
  43. resultf=result;
  44. inverse=inversestr(input,inverse);
  45. for(int i=0; i<len;i++)   {
  46.         tempa = (input[i]*1 -48);
  47.         tempinverse = (inverse[i]*1 -48);
  48.         if (tempa+tempinverse+temp >9) {
  49.            tempresult= (tempa+tempinverse+temp)%10;
  50.            temp = 1;
  51.            result[i]=(tempresult+48);
  52.         }
  53.         else {
  54.            tempresult = (tempa+tempinverse+temp);
  55.            result[i]=(tempresult+48);
  56.            temp=0;
  57.         }
  58.    }
  59. if (temp==1){
  60.    result = result + '1';
  61.    resultf = resultf + ' ';
  62. }
  63. resultf =inversestr(result,resultf);
  64. return resultf;
  65. }
  66. //????????????????????????????????????????????????????????????????????????//
  67. //                          Intro                                         //
  68. //????????????????????????????????????????????????????????????????????????//
  69. void intro () {
  70.      cout <<"                                    \n";
  71.      cout << "               ///\\               \n";
  72.      cout << "             (@ @)                 \n";
  73.      cout << "   +---oOO----(_)---Ooo-----+      \n";
  74.      cout << "   |        TAGMC21 ©       I      \n";
  75.      cout << "   I     Sibt feb 2003      |      \n";
  76.      cout << "   I         V 0.2          |      \n";
  77.      cout << "   +------------------------+      \n";
  78.      cout << "            |__|__|                \n";
  79.      cout << "              || ||                \n";
  80.      cout << "             ooO Ooo               \n";
  81.      cout <<"                                    \n";
  82.      cout <<"ASSIGNEMENT 4 : § Palindrome numbers § \n";
  83.      cout <<"This program add any number entered to his reverse"<<endl;;
  84.      cout << "until a palindrome number is the result.\n";
  85.      cout << "A file : result.txt, contain the final palindrone number.\n";
  86.      //cout << "resulting in a process less efficient\n";
  87.      cout << "\n";
  88.   }
  89. //????????????????????????????????????????????????????????????????????????//
  90. //                          Error input checking                          //
  91. //????????????????????????????????????????????????????????????????????????//
  92. bool checkinputcaract (string input) {
  93.   for (int i=0; i<input.length(); i++) {
  94.     if (input[i] != '0' && input[i] != '1' && input[i] != '2' && input[i] != '3'
  95.     && input[i] != '4' && input[i] != '5' && input[i] != '6' && input[i] != '7'
  96.     && input[i] != '8'&& input[i] != '9'&& input[i])
  97.          return true;
  98.         }
  99.      return false;
  100.   }
  101. //????????????????????????????????????????????????????????????????????????//
  102. //                                    MAIN                                //
  103. //????????????????????????????????????????????????????????????????????????//
  104. int main()
  105. {
  106. string a,result,input,resultf,save;
  107. char quit;
  108. intro();
  109. do{
  110.    cout << "----------------------------------------------\n";
  111.    cout << "Enter number  :";
  112.    cin>>input ;
  113.    save=input;
  114. while  (checkinputcaract(input)==true) {
  115.        cout << "! Error wrong input caracters !\n\a";
  116.        cout << "Enter number  :";
  117.        cin>>input ;}
  118. int degree=0;
  119. cout << "\n";
  120. cout << "Wait processing . . .\n\n";
  121. do {
  122.    input=process(input);
  123.    degree++;
  124.    if(degree > 100000) {break; }
  125.     }
  126. while(palindrome(input)!=true);
  127. ofstream output;
  128. output.open ( "RESULT.txt" );
  129. output<< "number entered         :" <<save<<"\n";
  130. output<< "Degree                 :" <<degree<<"\n";
  131. output<< "Numbr of digits        :" <<input.length() <<"\n";
  132. output<< "Result                 :" <<input<<"\n\n\n";
  133. cout << "result            : " <<input << "\n";
  134. cout << "degree            : " << degree << "\n";
  135. cout << "number of digits  : " <<input.length() << "\n\n";
  136. cout << "quit [y/n] ? ";
  137. cin >> quit;
  138.   }
  139. while(quit!='y');
  140. }


Message édité par COULIX le 23-01-2003 à 04:01:02
Reply

Marsh Posté le 23-01-2003 à 09:43:02    

HappyHarry a écrit :

tu veux pas utiliser GMP ? :o

[:cupra]

Reply

Marsh Posté le 23-01-2003 à 11:01:52    

Il y a encore de la marge pour l'optimisation,
je crois qu'on peut supprimer encore des operations inutiles..
 
Ceci dit si le probleme est insoluble, faire un programme plus rapide pour qu'il tourne a l'infini c'est pas vraiment un gain ;).
 

Code :
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <cstdlib>
  5. #include <ctime>
  6. using namespace std;
  7. // number 196  has not been find yet after more than 13 million digits.  
  8. // i calculated 12000 digits, asking the program to stop after 30000 iterations,  
  9. // it took 2 minutes on an AMD 1500 mhz.  
  10. // the method i am using is not the more efficient, special libraries permit to  
  11. // use really large integers represented with as many bits we want, which is  
  12. // faster than checking digit by digit .  
  13. // I check my result using this website.  
  14. // http://www.jasondoucette.com/worldrecords.html  
  15. //????????????????????????????????????????????????????????????????????????//  
  16. //                         Palindrome checking function                   //  
  17. //????????????????????????????????????????????????????????????????????????//  
  18. bool palindrome (const string & a)
  19. {
  20.     int len= a.length();
  21.     for(int i=0; i<len;i++)
  22.     {
  23.         if( a[i] != a[len-i-1])
  24.         {
  25.             return false;
  26.         }
  27.     }
  28.     return true;
  29. }
  30. //????????????????????????????????????????????????????????????????????????//  
  31. //                          Add digits string function                    //  
  32. //????????????????????????????????????????????????????????????????????????//  
  33. string process(const string & input) {
  34.     int len = input.length();
  35.     string result(len, ' ');
  36.     int sum = 0;
  37.     for(int i=0; i<len;i++)
  38.     {
  39.         sum += input[i] + input[len-i-1] ;
  40.         if (sum > 9) {
  41.             result[i] = sum - 10;
  42.             sum = 1;
  43.         }
  44.         else
  45.         {
  46.             result[i]= sum;
  47.             sum = 0;
  48.         }
  49.     }
  50.    
  51.     if (sum)
  52.     {
  53.         result.resize(len + 1, '\1');
  54.     }
  55.    
  56.     return result;
  57. }
  58. //????????????????????????????????????????????????????????????????????????//  
  59. //                          Error input checking                          //  
  60. //????????????????????????????????????????????????????????????????????????//  
  61. bool checkinputcaract (const string & input) {
  62.     for (int i=0; i<input.length(); i++) {
  63.         switch (input[i]) {
  64.         case '0':
  65.         case '1': case'2': case '3':
  66.         case '4': case'5': case '6':
  67.         case '7': case'8': case '9':
  68.             break;
  69.         default:
  70.             return false;
  71.         }
  72.     }
  73.     return true;
  74. }
  75. void shiftString(string & input)
  76. {
  77.     for (int i=0; i < input.length(); i++)
  78.     {
  79.         input[i] -= '0';
  80.     }
  81. }
  82. void antiShiftString(string & input)
  83. {
  84.     for (int i=0; i < input.length(); i++)
  85.     {
  86.         input[i] += '0';
  87.     }
  88. }
  89. //????????????????????????????????????????????????????????????????????????//  
  90. //                                    MAIN                                //  
  91. //????????????????????????????????????????????????????????????????????????//  
  92. int main()
  93. {
  94.    
  95.     char quit;
  96.     ofstream output;
  97.     output.open ( "RESULT.txt" );
  98.     do
  99.     {
  100.         string input;
  101.         cout << "----------------------------------------------\n";
  102.         cout << "Enter number  :";
  103.         cin >> input ;
  104.        
  105.         while  (checkinputcaract(input)!=true)
  106.         {
  107.             cout << "! Error wrong input caracters !\n\a";
  108.             cout << "Enter number  :";
  109.             cin>>input ;
  110.         }
  111.        
  112.         int degree=0;
  113.         cout << "\n";
  114.         cout << "Wait processing . . .\n\n";
  115.        
  116.         string save = input;
  117.        
  118.         shiftString(input);
  119.         if (!palindrome(input))
  120.         {
  121.             for (degree = 1; degree <= 100000; ++degree) {
  122.                 input = process(input);
  123.                 if (palindrome(input))
  124.                 {
  125.                     break;
  126.                 }
  127.             }
  128.         }
  129.         antiShiftString(input);     
  130.         output<< "number entered         :" << save << endl;
  131.         output<< "Degree                 :" << degree <<endl;
  132.         output<< "Numbr of digits        :" << input.length() <<endl;
  133.         output<< "Result                 :" << input << endl << endl;
  134.        
  135.        
  136.         cout << "result            : " << input << endl;
  137.         cout << "degree            : " << degree << endl;
  138.         cout << "number of digits  : " << input.length() << endl << endl;;
  139.         cout << "quit [y/n] ? ";
  140.         cin >> quit;
  141.        
  142.     }
  143.     while(quit!='y');
  144.     return EXIT_SUCCESS;
  145. }


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 23-01-2003 à 11:01:52   

Reply

Marsh Posté le 23-01-2003 à 11:30:54    

merci, un jour peut etre je programerai comme ca. =)
c vrai que mon premier essai etait merdeux a souhait.
sinon a 100000 iteratio0nbs de 196 je tombe sur un chiffre a 40000 digits, ce qui me prend 15 min sur mon paicai, ce qui est bizzard c qu il chauffe a peine  :??:

Reply

Marsh Posté le 24-01-2003 à 09:11:04    

Dans bool palindrome:

Code :
  1. for(...; i < len/2 ;...)

/2, moitié moins de comparaisons, c'est pas négligeable.
 
shiftString ne me semble pas nécessaire.
Il suffit, dans process, de remplacer les chiffres-nombre par des chiffres-lettres:

Code :
  1. string process(const string & input) { 
  2. int len = input.length();
  3. string result(len, ' ');
  4. int sum = '0'; //ici
  5. for(int i=0; i<len;i++){ 
  6.  sum += input[i] + input[len-i-1] ;
  7.  if (sum > '9') { //ici
  8.   result[i] = sum - ('0'+1); //ici
  9.   sum = '1'; //ici
  10.  }else{
  11.   result[i]= sum;
  12.   sum = '0'; //ici
  13.  }
  14. }
  15. if (sum)
  16.  result.resize(len + 1, '1'); //ici
  17. return result; 
  18. }

Mais c'est vrai que ce n'est fait qu'une fois...


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 24-01-2003 à 10:04:43    

COULIX a écrit :

voila le problem, je dois faire un prog qui recherche les nombres palindrome ( ex : 3223 ).0
on demarre en entrant un entier ex 17.
il vas additioner 17+71= 88 hop c un palindrome niveau 1.
 
 


 
Je comprends pas ce que tu veux faire.
tu lui entres 17 et il te dit que 88 est  un palindrome...  bah forcément. Mais si l'addition des chiffres crée des retenues ça marche plus. Et il ya beaucoup plus simple pour générer une liste de palindrome.
 
Si en tu veux un programme qui te dise si le nombre entré esf un palindrome (ce n'est pas le cas ici puisque 17 n'est pas unpalidrome) et ben faut pas faire comme ça à mon avis.  
Le plus simple c'est la comparaison chiffre à chiffre (case à case.
 
J'ai trouvé cette page peut etre interessante pour toi:
 
http://membres.lycos.fr/villeminge [...] alCube.htm


Message édité par Mokett le 24-01-2003 à 10:05:07
Reply

Marsh Posté le 24-01-2003 à 10:08:06    

Citation :

Si en tu veux un programme qui te dise si le nombre entré esf un palindrome (ce n'est pas le cas ici puisque 17 n'est pas unpalidrome) et ben faut pas faire comme ça à mon avis.  
Le plus simple c'est la comparaison chiffre à chiffre (case à case.


 
Toi tu n'as pas compris le probleme apparemment.
va visiter le site qui est donne en lien dans le code.
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 24-01-2003 à 10:21:03    

ah ok. :pt1cable:  
 
C'est vrai que je n'avais lu que son post et  parcouru les autres et c'était  vraiment pas clair pour moi ...  
 
Désolé pour mon intervention.
 
J'ai lu vite fait la page (encore une fois je suis peut etre allé trop vite). C'est bizarre qu'il n'y ait pas de preuve que ça marche à chaque fois. Ca parait assez "évident", ou du moins on voit assez bien ce qui se passe.

Reply

Marsh Posté le 24-01-2003 à 10:26:34    

Citation :

palindrome:

Code :
  1. for(...; i < len/2 ;...)

/2, moitié moins de comparaisons, c'est pas négligeable.


 
Yep mais comme il etait tard pour moi j'ai pas pris le temps de l'ecrire :). ("Oh l'autre.." )
 

Citation :

shiftString ne me semble pas nécessaire.
Il suffit, dans process, de remplacer les chiffres-nombre par des chiffres-lettres:

Code :
  1. string process(const string & input) { 
  2. int len = input.length();
  3. string result(len, ' ');
  4. int sum = '0'; //ici
  5. for(int i=0; i<len;i++){ 
  6.  sum += input[i] + input[len-i-1] ;
  7.  if (sum > '9') { //ici
  8.   result[i] = sum - ('0'+1); //ici
  9.   sum = '1'; //ici
  10.  }else{
  11.   result[i]= sum;
  12.   sum = '0'; //ici
  13.  }
  14. }
  15. if (sum)
  16.  result.resize(len + 1, '1'); //ici
  17. return result; 
  18. }

Mais c'est vrai que ce n'est fait qu'une fois...


 
Ton code est incorrect ou alors je ne le comprends pas..
Qu'est-ce qui est code dans input des chiffres ascii (entre '0' et '9';) ou des chiffres nombres ( entre '\0' et'\9';) ?
 
Le but de shiftstring et antishiftstring c'etait de reduire (un tout petit peu) le nombre d'operations inutiles et c'etait une maniere de le faire. J'ai egalement reduit dramatiquement le nombre de variables temporaires inutiles. Il existe d'autres facons certes et c'aurait ete surement plus rapide si les nombres
etaient codes en hexadecimal mais bon la je digresse ;)
 
A+
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 24-01-2003 à 10:31:57    

exemple en hexadecimal:
 
196 -> 827
827 -> E4E
 
196 est de degre 2 en hexadecimal ;)
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 25-01-2003 à 00:38:37    

Effectivement j'ai été trop vite...
Il faut ces corrections à mon exemple (non testé):

Code :
  1. if (sum > ('9'+'0') {
  2. result[i] = sum - ('0'+'0'+1);


Mais dans ce système x != x+'0', c'est se compliquer la vie pour pas grand-chose...


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 26-01-2003 à 03:05:45    

NEWS
----
j ai qteint les 205000 digits; encore 13800000  :D  
apres 500000 iteration de 196.
 
je vais essayer vos conseils..
 
 
number entered         :196
Degree                 :500001
Numbr of digits        :207041
Result                 :145296143195450468077677288447116792110150598486216648148567262316524464458377489110534110397809910805846359876366471600486722017437238264123969484195920503614340625416373321056857461524121697499158227284419438499798354301158992512309666809471663052089807907012482472916251932588302554997754234131353083549086003938196019295621042002687904876099645445286255644780524611458710262510100837908697253184388308811364856525793399116964331703979967056774447904348068851288055879630608140247836813075584593425318852052783393992317274619132379209014384876443571287980874432499842175902679010867968079378577105020106091639513622565336389964954607057577460839023513482406550833598437102996097376370905669882305350183096522122520907693165644910640000703711199383232514349694287682185956488018098951191284033222596326547430718597814406567217599379103365050323733641522730571299691419916369610237816153065514811226974135649059847316504402659110791804060221899843352469036641304469267563619848231084600574716521217861064311002950444260683554683661750408918995272805698967430151518011485182391405229377597660126697287219133996315037730430017216557429808521418591560568716841690608579417117142798304382222768944413380279001308991790325076512599023297603063031574481464563897105216546087180560685173509443947464590312012679601177309759480965463989650218130848576586462203626060736326256298619509248155173829487575742271177951338199247334941826066323812355186697325801621168996756227830120670787905244471475039961476068717967955058447694823579392371700121264658900059967362101300055938540363881777711236911346852005236874922226082063033218796660717110517322435976334095227861684490206769335852842962174730536017532826854408669971817610228475431362157692913442877843716624484656066183220419518806598974017368431033177750461804480830899391915455380006562380206907799572737757667825475758813869806232578799406392260571223068023920755954097027782891569300459081856227077460799107859082858760808610225400257486534100161396827103342611149696086415556572413409989132142618684944062344671445550194618123494108381241017442534418211056367129412273368645001258555988688804039939482471556815126508193383686005976959485490970403421927527444340061948939926593848216417436363913700010420506654011461961006890790318574492876391107559997909190584618817689812135687441226677840470568634563499772437296695323870616202844825018150323911647650964680505177125216542083255594576075812228178183195616459445141790764360345870975056466919868812422862082398453140055551233781438128104196617111609984097485055912200856791614562537223750362549394344395791806020290317664003183243261586313202835166317772149260443345439618801666242109924707602238306304471346330078575461179246834237956605698064097147000513325805135230847458264786137360756869348511388890304785953570695666941027432691237269996145600742436548205984193148847665327935779785110379975750676022943900995990435012198855286108186074580497758557534440089185528384732196458945415515404104796364611158501575128488246863189769033805057011671676174363458771258389571405813382107145299771214729408052960790040629050968658411287282159344500276421195257800961912675996813416032290434525307933949278968580074918375968876011373612992623034601386191868301883040164825673899809190781103920037635101358422634950171623248352463227772482854060645881910008953240900725150633510716104613157584921782612785298523352879990489847505755181130365863070869657295988737063870226220211150351976018388562460029877754570380406846749544248951674181485781019101291234622872399050461114528900017165306722087524209786802418962048148751584898712836499855708505316525641956344741247062203738169404531587388290099366745560352528000036845540647293612519489107573496999326599989009873356616131311849298912325663737077924750813025111469739350591433098899197433467726835092491231860757387157987449177242490827079616094388146167781724648655702605027060970880029031699692539000228852754791628572306630932386411018695631591147996759938981964060317139753913520965981978233592038453241009216220513229657245578517490649385137315759470842471475296664245961000446422256793716661528759217180470505958413584860566424899596370049861504173297386502137897618759979928048515394610247131242991698329337297969725475264258568712471894330586438265510628527480633005214207823952881495010889679256120243925551220096021297895701784722166272969121424117447486912588115223742396740405365465828979850140560377092034024017340151986456646928622119345629189257023478288251726431310364186844914433261530789366293279501184779325843304256319628098253123420161443945219902529475959158301909917924882952700319113007432929386681775669176513537544495555798057576065889494785601072622794627130060498953412418824218574963581138075154750734951982718238570027436016627372671851520611487072540006460706834984914764995404283252271892329800585739432353335422817703589920949166200201797146169199176930757883699955818813239845464124655753440195110075626982432539307557903997426565840548906631418469190741692273646501735054511021051877756279070074258344759806596040006523234002521624749128770499693186122021317750195683088131224246802190190477914042358642846615282415905804722656247703451017781416265358952579559280079079536556635859101581055459435380441314666487212998493527948798688831772449002991638521872411766099771582646982139345534499032603882218384815360632689911475839708387937404952840896520055751186602970675615358205413830163871815566780356318887703048487038984929981213988210419410508797767312938589898085606541931586294974542223033049121996047613175071869365689972096477789942329512823055227833719835673009757710903289473926017918284622156463869086413396360943926887770660793280551612358335167333794896199298666839146003946313142844100951215606816600179279768288109698648328356155093725630708750654849274875806180843778349985941000127414927803727785452941529476613371699889954236193908416076516011135605465851465705115512380901750658086961836906766134040791282758257415738519340849865860559917900402682543281440818123573885635699737063482071344845292069438348975385232890408683579545812129499561610770083306818666046262948226657781830264008720821277723610437905911803447002714984456306453150328587202012872122644210210208451152145768679433244343693760061521120919774369408410455421415762222169138545308147480270208022408865129438391016032952478511565478689551322717417571146977644394734488187331263991244569173777063526907323359510449070873099145187173175969116165831206713229979608259940397346106586900693604876029916342784331313457931092783215711953342243695236706180087064127434142345652300548714220889842909909511519364556127006784607128698049650337991620063704569788784101127096893029059427496806353055398856582954362273775670047769980612008912912255522219341537310104094885352559762271725395826512319140620430053334423519514619869632659263049369449306471455753528242379994000506701769978740615249905594839018712593316000355262726021300598956735060404058190347917739542466286058789767001197699216815220052868906309458823376022446819486271273087500004326901543565204727926830532853309341717840857801364667966550269918560684258705865368266543033040821683378196206232821644217440993875095773840606513996602933243191595468010582134650275113513540423767468323067922619699917037416714890110433853151119119999456707195102148460217419705571345702793460375557154891896989035915985503094815524713559989717145355286270355399726036866660427765743290703167320435234706222837362360538585934325498182537445665832417889401160438450544996445207157699542861237954597892094797032927693298719459436190052075590546781123284147340432038348193569867585769933159505526740002729137640150436663817182472133286996453169198683123827952632230127218363306507564236200374445997009454354134546035641957158514252344618850016247689405965799399176499936356357228722765792016712038095178088999729713443974557077630128130929956936563902000215715871787902937490357508320369333293670100888044032741141513600638497171183006462030455759660780822386055621492271398043141111818291235348376506816704404299102678928973448756836405788697381897778604809032168057642006327038016458006275064040299326702653856700542849962858934526792799400117014779970784365057864688477538263699128054198311503418309490405246030877054357550061060003234907062166957099984675252146768122822131826818449182706827900008186078317524650195902361926983658925117460318980078538264314215283412127446988472880825000047857159743399457470569055860161812202515028716266282205807289323049487282203960643791001072256658879992945761841031494958556152882801829221523648507895617843431471813252119779818298173585431660699780048498324590044934480491824770534603014331594180541179286347000699636821922997415052811828943921580033204691149941792648327398537652410017645186448084325305951138499118523937404282896270378042142615510066945519771300975940634495531011864368555955055183904148993844493427369882487865517689576725197896754045997159409547878159799997666218034382292579519103136896436630679659341000116603506443248197045659343225753078429430343509769194513920863824767492874585995512149448614114416499355240098854397535455169797960934038939375836765387841962061276739259179245180974654648642114740391354238116532565592008882000434452901971160210748789898577387457800602298924338650720916662955596502046354435675893195102597931920540444926752282858054174364269895798480791234929940870986472665530799918385393009451851199048554313595872458090131960900054008655078987884566699356240884010863527931768578246786745004681411890462181058175836729767817781040676920210412471948798217340295492754024556734017991804042577930874499592433543717262573221933761726157191309443011223300913449747700401134975603159270650965252331741046800659667323346383835796282103058094422993318543519968689003129600370231847975314673812462811154990025685370249686086337560574219950546896201104330308799101582640956187286308498988831518739967109209951102369948780627004829294819501897762990761960323994300192838501049954856174709677348083269060977579041028831059239761928558274778191255434975470678625054975309617561211027278200990181496013342479820337221087409474992037674648754792107461845909054612805011502109792252602419688431281283832014789235612346093996103412844100067580133977319274348658593901609516210608007723829220499950806775912347989380268267942959079505481652415073868281174668659116729957335911301907537479174674551851568641884563994629429654819879837889638539996766632523131806623598536991325472991929633899824307883365486397256122253491636584075730320661583553900715825226776259172666734574615408579886731394757064899998120166024118117494371938645349636014345124433124743970019438000671456473435484448538589998019229412024047538452300321475366411800020237006673045713088223978040077054169130072824493645775612429016554890189450849580341083611047690404876904260292065526287020486202916481131768998483840156492473758729399376909460003080005654820168650016466575954300553971659576483261317135039329270760940418542746421801268461735721100465484439149664827309050253646908711987347191470977123470110013900159486798450074779994853406852450280375323534130531842522731574424544416525075438272549992846635741328500973936284463130991481807305178176835952074462206866574722898203610132174886499940125079506465439744396050585316586781517236040489254580929209329850821145514019963719075425753583009819556994105166301960370520099188767750309052145549127382994747327115456348010587672412404387279524832669198925876030928968204356553415198043641751959935621532935566933909959404493193670963440089227812009875779936451630907369346997893698081528565989620090190370999589582198665058235028780528319396075414012570101636445802415528490534879082241375630110701745521497241225760842349366560761067955672676533218771539998255950200189258337203574588084853199306365514357857230642024783915336978415404459657124640899626467223597212518687055026600037599441541046976321475398968100430756793914428536066165742298416845894650259699999994928589647367523307180358365381175198201757233722167821793629086121250027970637492376041018336142663040599579899936314335875730877040667297746072700009660649572858515755607795897585049324088060345904721539259811938777723020830082286243301894029749998940281858275697347214839276642897027092378298323453050431905023697505322907683592595757191668280842760514523066715536956982840594818131954875144990989879985705971011501673459547940779805959785237517581816767393499432300360290857501917444701039198170009979174754033719787008881097950394476259043260041631116153223729043236339972423078040897058937990370075359656938731832617161772467334243638799228193944399591458238394483861836451670561483547139075844824009348183080033162828760440668171897715023695855481994737681197530930502375312610472688356745490453693857970588507989713902183421036113367660275167106755159657925589699627214460355243734379908963815353414823836967774314650875097977711694673241289638391851253806821010993155136466552243724032569294902252993921132463220798099088682250302302490848308817304728113122570227838501007754197226675916048787998948122500858629499928532602271257233096776580175209523985531716027381182030129044182959861141464068663735603389681594637819720566439848834206464628766567989737227589420333567237683587027348340552016890079595235515617386572600995593602067975412372912206495898525419965694899972019252977975467944766713588006983178455277585659819319571039128131287238635835930452400082947860099871228140216879101159559000782817406196185045754102304672754757423048294137334458675289956742829361061016847146052767039573399055930742469629522746454201402239272509575398031885831358202915576120220190134808293575462550258582956019202686768243731430830581085010535858300010371386224431999829274186862157799102195022147938662155659561369188440131695484987969349591478093804355560561319499830096019830021127601371702990168976751695289839131531679869954473737930170524928227595670815056173254268545678952993783303377582994712816690304469720671682042881239680172803716451284142005305865086355969494136819374718701683737565119004790544429769763826944674417507446062349300120295872031813489008133229439465222515762014781912410136143565856745008998609741404928318108772948009812253913889977796137364215087606423330401715984613950832076633806285638131420698575286609623777009859255479832413823800829277320826815693948678129620636948497005118313328877378230006449086208645725432000675828416817232399729119341229928257799597686628050517361282646434920044778788959824216538536388506426799899957571806198182977636587318235391314305173816279826580162875116700663887890040553097647539823169036224722190711257222895115521205911021722834023570696896351570372644970239695638858534131998286331729788629799563112547638034643878121524875225638742292164598582555651608011839244874555157212086114965825373798054107645337728716314798002469887469559686615232404557622264203532905528257904001046879878240941140142949513807272897520253082789112786562618455003331535603070963981313504447251250448300761668189465098886503688541001732950031597043551193052955149253928491627351357299059940922215472497137973250779559952870365392591570860367328139191992328126543063875412872381990544403285124424139598303389574122020065690718761942750827460467733938417414016020230533364576751669888865860311600135074912758551556168926429910549840465006940769435316015809568103586474530948500698056192741641717436537901742872122004830582521047334061027508133538386246280960330067491405807049992754225054630333706758642555613125480182185765159942385822701598018131549807680301083595636958138166355510006218799245519494567268665599743469206017820232851592913201331557193190400932736978839645068629543159502872190828411138538053826319813381977471193892521201130516207164067108059371701586522943710433100518058680472881546289317406028263017322378933478348182609601133527435269101420869276481723566694428792063790937975349329368773438462234331289909973020729000862671461772699778694270699962523383570030036725315354735265937577740589109788646738701669549842800321270445056826072991339922790820049382600196189251642458138043365615221437227754854801149715533362199242246195641887865569177547609603410819871040456609971792362997752324932214470122969753693713301452553772886185231085598660946209303282108731754980239825123639977938464755536158641824782623685002488899073824840373012936221460943906114068308632782076966123716885865059720580212602267059855843689203475696106829171833864157382588288844304587471228725935125194824655123574531048933549960183467603778686641858200945331671841502394223605713472667785259072446059677932246466332778921582562732464925429621500036013978468853242708889358801414597589092248770513799427299035794834144146042013826502156682601755481238012728719721308174754633518024517694822664405531743003252825621359913523066817430966560780396642310351374222969970626667775637906404495433894068201619800631052799398199907063614319815943725872690149999290101665442584471824911859903438179694987598389638595580190238615598530346797575878465912290306247152456389845496915528041745997013849797214274801094686099770660436190491170408557294025389841454324863004151984235709148040912974564388481473459529465689435354010836703913653879988298119032209092427182707253784057013567007445042379779618009510782927682445682700035404292766202029309292565742821115615944702999894328661664168599523738282690582678949144717154394952794175748573143713407149516109115697427937789110024722627284863390197011397013998251516987451872808690058812314153998569469853154953619903773131814746826994954101297886095871532406965325104507606657261798576346803962300383384723442054789162160723194377008163904089535570806781237360937912243252978023852224178181712008371831006024300846416487454296350174330903106247988005211248119125349376228646739295525090279982753318525576420748041132194319920047003930564811522312937393172745679978539074850178369830047693277828216864757255133601126927366299195745776757041944676523571460909496864004342166026945248356309861913618671915829119436607634767264850231712626377476812314900297635120005779352282666747617871393265200491505776945428432409299494124345278701432436993060442297359959770716583693212789953474682436669854835868807913436000094673305205451819866072620270376600306633484039925429069674436616897943719420010512716989516299956692500302516549106648037881942293498904047038183543535594868008863988736013212853872527275083638965919832043995796730016718130054826742610131151898719905864953051556341482036894932970001052440111780901298431768948555999489813267777763337610198320381551564824855352263493226579214050109857418068425229511543786725572527467074313599752902482313185346990901960461883172745661700415545015028705193079740397727711947631736176562801425655286502200166446378122285420060543452356956772523256702294257403888246043359422791264955113520854090122708646077028583080082301627745260710878431739321945175745987643845799362235549154494142613612970321751920992083141575240617411183261030662646454354560105989148653502700828187998085722035503533342987563611799461282246794487599661024032181247597354025607854600159913667704623682921810136430384052285675195767283300687198821911103350720380097574622272805805577806817172279995823573753464634123266050096224357096699539191336917752935393159788692132425689720802006459951084924145056732964123102127532414142591470639996460638015448160821221008988911814575443682658074270117994598464222164886888410983953427224087140409173668357608646059362140143095131733615494686737772255872111436255594424734759149305285308191587784866554572946048286186974523020703098020973050791985642510317396699531301192330065694200148064697347066867888234605504585928388974706725901414403209569844376037407686607809531079246821548746130694823186872509999990247668446937485326162107219289369203500718867979351300695056880545598622896848729725565854598012051508191242063399612989917167277334759401076702262970421637047325978943690494541326999940574418055896428454305784167305110349289583072700734985333087877506777700917870045193609673057922517110126939727828463391366318269244985998544457551630774580581013174756999983024815551999855078792556620691053872088269451315436748350482922950485736920761415879918013341954510173553341704868674844428994611646154962586139929764848014077790903097727575840137491212921080301856696025538796203697514765813091134458382911933477333083942375653833905056833201262978177059751784261026842053543011213757945265536155603137675002530382307813582743661245546453626753593210227820064482259435208059726920864933091912319678315286467732738570482324990490191443362879104660647537889833994569750227477011988049614780305591625792976460501205620201896726082185378105729620606468048664550890007400738324253542499135397793634271712166218681698922122209131742123550844715768827329447064495315032613962778481790104003623265396999881758646068827234982272990180889135357059486831880082995184445735638982813345207609116944818305797405401914406951485213566846571759422368137160706413337905590011997627707624757338989911605028929175821483618262206075664535982429437745642187979573368698561630730084068499600137858224770180828037220201096581953001246876944768864740790663905464182449858430429845835391007488182098139926550647064050429640628844802937342424972925023543512098228221463831626800206737491929044777045022977787777343398647163866332269742706330391472821338341163511578898594115319642273752382978423629076280050352344783869739133703318485291885961300306065314441709459795728235413242474542829786050194698157265108000785625309509884143258332478442855949591888152135460625980124540179247333080000422332110030558450983266818686367881891291014978209170158764158351995830027670774192707679704391036422612127304354374190416688284105703857979963747322775181010344299428520157160955451349401135959994769710659570164573824802103429385650493456777085152840070033185956484544011151607867207190061913748562793705871836010202384337663791987189856497545858208298944028352384641497620786087483193485093619870628626601750239607389043263638090596995742925591386347798593819907851436636839850087351664783795847926952263061770220886135325225703181376786798655501397508465599888727425404186538466713066060273284759785568685791995831295560697643393424134938501045187027315910639331777499083940108129859866121497393155965740854722308642951816513551897866617394573436568184132943419129391603502253705729768265625230643583388858971056468269435938469361236960935763719543398852689445928559796680851163371382174267261489993000199426790504643198014803206830897591471043231850498733729647084219983508628294585728655299158951875461037608736263782056270254337135326594447475976872966990704861894093932150075241399100111993302752476884037919306201641575766147886709413624062399367538404978547264706742990018921730344337413499610590416955891321630097878726784566999151465274562932790249493032604345689070242741612556758829686425006643380955864059147642654644487596035785341413615303380665880135993650165351874172577286605399021094087181857755037860900851175702751858605508722082350832415108763590360880840497955141093319684114042867081551178127646000568997245830436491168647159033001888446415499319252813778557638538442746666359384083009928769380840688069377702678840942840164187028057117869385878523235769532551192699198713381714444725896816268020947705561484619926175319075643971427709717658125671627810606148245844856365797854049462626372582508579834912105645748985025989933138453231197033661942472237645656432193944078674050944417707587978558562199010178884831394402404624524701843066561371241891542337744624047756480413495866616274724308553174200340398701200823869191159078835319258581699015816734921800079569584343087379514869373548886460034576431195191179831454128035002266447015409367724171177624282405323659876404834655162030179319648811781882681709507982030034231099300219865836942763758864533083081309443291340753803693193805770515292243275158821057339201625662753818368360400225712138340615511392580472056633622188576979129774221405248449714952188611306709964357010146844740380666073373936694999087278834296765187924631679593282701131963550036813297948921080160983742867894925308948817064848896717443851649272994297660899981204418823219002182548408796472305539313014856965422957635227278380088622602529739571913536885207749185990257136159321300902644604852459950251578113132001046698024642283967591580852625011496623045757931362819223234160203008182031071418142691553912133982029826658575504506863172004372992316190269848907822301717354121511983613084997321454027157562406585122344963888488480236177245758257140125134567606635679300561962667012639208734513183634235359522784798519571600783944319463531680876901864773105426781275533637166816923813879315267076420417097818890564331220855890464694044718748410537631943812499769385004187006269264778542830254232481764190390591100102002084030113605840602644588643170171429769235365871821841935749667797649462810565886024917985955754071043325323631105947229641138991185431698136669893859451323140403568816642191001600077256207588612494047994678739100026365704878467677142393847722012674074231207547130456552612689703541242490893876912821997871299901695793947235274515709865373791535298460822594108859650544163485224671057974062381915661013984797196272464078323496396440042462965626857150855575859708301818411371006036805224799252776448626467302653920803172887003603928289757109438225054060151417254079486916077160160080921159505504618270469892189432604671896380562117420253631349717810776290682069880220084043120801866514700744930928865959493714815195230868269464614214390880165973903941231898185830586086818616398761277643093002526780057580495222794161110953518034573761280589257770509594560216624187871863432426779698629357769390051331103999860211882769739592564876143999822199417158643725237452778959985683577076280508572531879018173799335581306472888971456869876670085224066811215819020848416599122318586393390273622474305639827425498961552224674026062356170716098005459483132705791359699676817372609939645688138484759390079475296890692976130664601424865510293505994730543553964147944068855543577900639927071395706026452103931989678423920259467507371338159849942549322602477767153995376574273068391672062058291642581237902571747528531767587946016861275357027592879839634098476813357241003330913293451235478595329682916970291829079721721993445626105719011844434182636303855081430785076868372806048997772350396042817531852431218502839790178401656870111260838916036246759829325884572700353060159568370304146051689669722000076664494499951202500075821593953698325461598743099808065916667739650766029917095249653179559697552905129727749020549215519906056076437010495106395286109606974713074707794688979438522270628600240308672539027547308813527778184475980342094274442427056362795020290397964042984808949692014247840374319976606207576420933019704367568970400067651273176848395928327602186350544769097824999845994929083635353155038482319740191283654599829699686965749457818055094614671585230609978258318705268002539300505788173493404218584333973806918768500895041551992220531751098198959357641345998378597018420990942013158830015560821017529129091460484933849157003528240968567220697769671910276591112767823450405076735164245155120082100640316511734971730133643221635937915604860343005419693450430322182946411778250644139821680094167539600662300324783848350052484632283064242037997492108960543482415241001536853168120704109568679723096229917207854900929874319536042734191146700689512600441300655568364628376141670619914959830883023901614895139809946976048943167369753241640004439908271558629048162072446531596356782189120635168952984087310315957699606806880087293689753159909536150426875131866507103543306868155469444583376514675139071503791133742568579300076560989814345420624944918278411589331249956492407808608926875197910376605252326883338208387204985179173818015994212001156364780429985645921528403873380279702993618268546800884220302715411227179182482780614876026490785959017834106679770718971290462352189188428801848773881942875661608602620748912636999985421317725584055949574559109339424255437538382339150812804558157813569529947134597854530777755663035712066659871483164599277036351859776226185393566547377562833079152125290673841945481895784116499387103276496030723127979377698802881346544688445927500665960423013473498821528341943896019172656344172727209255145820083963179470700470107968171885612966227833036800378315219884779639324622276137663814328400094057225994589834766124166285871419061128674535940918324698541537051235274781720126996167308788004400613771402567985632065531276591137984532143940000396857113471663885698442623390329876580524066858344173824530806813101965354450701640477455878031515068943617287506791763538546709307483786633585602284173301951415599043808894695457697556418925448836376681883839631793912780570799723358134097462195666571685345229965564456637527572312993658708389596362170335060244483626941681733948787339766273159080234110806297628098970976425005163310502731445032906741181103515327050829694956940511047912698849693709953604120760091688417262062020384077965852623848720983636908978299979493564622779623535724217129786680997071091736051876048847416977753070539516945405403326273613743927360701868792741985610637351993723729815095782574898117261508130650238601263293466393372348813986779487969744272044989753448086707134959840134193932215130521720683668243400141343142339813450277284791647937341023770480353576898511948017985690789180320180566502859879764170861444955633067990961316865694508139470237779641591277575548010086720380171195803404264691098975220670175849899610091559469949658138089488623373938924108163880543888591204912299024282396742685738164353926356027792263675739730340821960802770623475674953270559765890351001044748420746356752059557518846937637740913998802310021544896313499604772607211957036234401413444257685711412271575024706199912268914148205232058017866797870840100443799405378445705827708005938035829505999772552833594224987832201436702909600968045403502163768508284764853041822702639329928155484724916646380384204780536134649464742843160237510197762396930966985210127089906114211179642820798000354423161655072646884253531069942864794002950591422461427027190653505642173616644489325320879876390544128236615043653678778845410084132557058340123070466692825151288959224919362329103141091380465358338922524137397042491602575828730799339300826677016981253968990757035815780783249908688403565637625776220808337871028647510605959051782509112604648820136803759511104801231925351331929078115836943584532638372857042409534932732153971829900030006994228116004417444394919535606536816817408886928824354372833376805551956067368600231755916616829837386869720652308957625230571441124882153250999283631532806239788789987859880790444655877216860697708615194611281124575789992973163487726160908247968975710544460628272322943169580544909784791358175850238358751685815018788103095694787696652410018451820362782618067184236969303063587860428852571529925784605871281488928146772783191538759500430992926084482379952619655116939796470958039528061055033698186744871427365821083823943653175841186807207497268338868920902928596134270171552363451315264194231720530437857466000060828161063031186736119440045648195009602590067808574033258589839437659230696169500784397653124088775465896048241681297546698154549380398365848483335592133764284921234049808809840524897752574726947518081700085874579742033536319876421982957448803697050496015770581791678692116803445351763540148847036478505768163892981005533001608447320711090811743771338031864949308320102326349203006082260177468096794716214070233730341535747849072590045683366007209547101738581521455882959089724652392937285356798322139283453943253394429745021461606659568607110528280194562900488999063646713159550970120636999693709265245900045078993118086132682227086539117179604118020278987994792945072975669120740257937772970178437111070481774723038178617046098862663038475600879379387548082525349737289047395761777157575081258987043925357442333722280093564332896919296346867028250698419923088635322443664353941833001359853026861868056629042396826989320572640932123018775673956117429476296361187503297746425721999360778530629352500493193261703624604397284519522044798420079462456000733320682117502000174989487613456560357662970669930013110146582750530942044926069761516150992570009956313985937422560088186207879049954622634014277137114254820003925012318620317641712595697901118147076497195321850314452276170713663358804405943543000094149471202012509979620050372562380124456601432177903706347742975409726977812530571318965004875760363830710684003960517701550881507698329244055145870943974937615547563913520631106210472428068950235423071412520179682665877305609664689760636758787896937411699660470682745544009317494746345938139390028315934559493155325398432372171883522563834603610013156050005194840472985349943587786996230500853922233705145796555730999786006325286442872489078475898138576620132158831344141211275297180765299328831691091381189447142433087703666237728016368157675788130166307385007317691500588529757340314580693800491186154211883985690641467201853553695185739427531091818255850212450681492939022041721865937929187799856831153756650307007670999968657262242841156305228186120973444497147926011173166972543623790471566500427222236536001194545039749124999792151581267490194991592469568783231542744936612307877708492100081362299112152250835922247403748333338060067330122738662317895099865282504648441453726794884561342187387098157636184513191121149866367385277464836389738000233800699207419729578019520005566078585925073467007131383179684928859998834650645256060599901195430031282734948483160065555522187345451068015511494454509256953194796416068651395211439457627574596336998365997285483489707020977666437250444727181058262657641805609672327931075767139630005570120022396590661561911255991070330004761748772817036601427857916186882709138611425721199334975250272580688100188103940500237341183528800292732307206432616989157443345302610649291070629474711262117818780897340889327214449516072442574801000737510360703566182928602766109385603446694959716218728178129135760718802423097331648668873884752783801133735976919831872751747794325964311298321384180552867690688288354442572799457496155935744886694942418245182468176942976667630108708976809014600932620808955210313479809476030005634214471096877695819498567250499208758070948286788379876681200009010230966267037843451011441381872421283042471375034127424030521023851178603639733387906460611993302771697491438632618691603772598137176638352182961400073910478435084863256164752183404522336641522374989900053252786431353458507796358054767680508598129920969286887534002112186726436384137177953484579731531619865189318455807922512811956336155818821777763124598227143078446634830203482481008631079875572021934951016519387345003980615205246089682614690993538096023239600451757467885302069400680568218116868006653300045979940060367131203062334167557183217975635758001410349374313465924620119606241083705389614467805900123858531693398859331458760165351966038727664999693450554501289731071750646861608524475695669570676292300559324257134597745273841267312960770003780596464218809318359207627404940950587863259523388209584165883579898090634035002190318214312862215971119121155848360588430725988142770773095455949674684996093923929580569947255691918685420694110176923832606778927786111026534836339401288408269569168220520023328236424326915639362414438833191247310963675182219497764416270745150926564331427397610383875856976299100542805705095332711589516714123000559417701528833008599538317746411165154708011931252682336032783948963651897538969303211622897569826744715711323991374378305835068918027405731077336201806007115777918991762181258661190305390016728670510264363310768016663482795575778676663420029373442855074828279124430623166846112624423795049932487332850477415836832006815886224451040004337229417810816428274700221231308523258250429780963515832273765011730651143328888461020139974570650358436535114683669565818112653469500018601429630239329496517491752499977013373877725986897479732976492924406322016157119631343347725619759867996392838214373387944952621150791712746103529507921797535812218054238190888336810987382133424123929642417602700922102944605949954246201730246727251477850494102837525578386113299430362770188385009538076457935944181614439693631490630252821852976931174897639116269320345043664218836537276512756184769001282965417105911916729746102123752598400049838888587913062806053446539454049722446871558162217221513190018441005680355136187942508995958564114186607640416891257130893101023783725382844500393011028398792522146948675138385638475277812372773278201800745663664625076825280979057177203920570348251498862360301404310593944651916511114750743865388340423317429499576762142397973088123273499989406717963133823494559588601963946650921070164710979229298960791997142330837616989340886826699502829361959117173245871419164327322181434789480814812132175690682401729954261985098235846048112980850710954430170272702811770027963865030180213205930660001385287715367810051967833860112505282341297257269074087309997821281068349548070462445186388092533083546610198912524242312792931074305844384246126327916506608499808167165664519779425435363143925603040762706240084924186262748716077439991854482477073069960683305520387056304498423496992505737098235980425760026857421711813549113496335453172423943312896543382546794210317186750671550317328073479316396991946534969868630972796333689105969417665280043178289262334880925352098967933766143795016346706886860962333556553912537606708785953526132413380258546088304682808320283397016345711234936505404200131824972692199106165333979041875297059402498306314916132182067255998902313181543321425866451468965268207923048279672879704913619126902037225554872947264593966167017668853068688856012444949230733776852267107533141281159960309844484313214872406460509049961436307666780523862377352427932452072677090337234662700915769027257713990663514270902956163571014351895781706442159551174851593649717936155217001366771459127262380312389638315108324621781724538855770603300075318905285746089819693132020244471575994842585281055753342300440009410639859979089363188553922445925813964379010314570375559821024111328155046945911409650697302852365355521876999321353658425399187923367850402999784704294438166351531521198936806502309904325923042346645677167754997490072156198538127011856010040115959090202129842181468044542442918147457062351719187564807019976006730992155362317965758743193730281824814623518043760500229489137991733804974274208583096450519365417565979503460351782528541373759901177386318736701644408711063830027120939375053904803864776969759707286668490741820118343325348852294179640261204807784433230939605330658773456758672565141620043867573818050310623178545328777346905411801760038505553852540872784931756399798439154960444838030168018827981306707623459142650019917796554787893502514753600315366994178612272738611683681399000260103108399765912160054697921130763400571267515667189709054933469172864493015270355670331752856738784257350100066567605257849360396016364883731883361696010499514699666292984328712685830115033641485593720532354500945000640562214287521579885613123997325076264524113554186888793196160213678561369981145196240291042622458243704879569861951031610113812557559854720360193011030327471694050145655781041572485248867247322084917032474651989464713965276415830048839468325605845990641999117956487506805525700699428568219318195043600441853763216168502420038010556415727349883670802280000128159573866539942473402575946615603507676886704708383488727337179349820004562386651519113645088456753174933376550312790529689646513896958261122216235339815076098899162506595154288100689951762913920550586431546507966720653165165060587291167131103454681379396887516638847523655472818851944491662267378204787808792810806388381785866630022305156396162432797829402330518268375305342660022583253841844589675306475351211748126132005831699910624339103648990837379610227191290326972341914540668546540527957473172542689328348463353227106348632557345144513070295774515214723932645638925576574031832965493769687634638904684657302090397571918930820007707635720569488468007871047292082367411161521741794220339758745144775157774756231099397545795996956335084015916509204407999663190599559540282699804268734031519364954420989783132276135875187795971545720903112491203923940193458364940843027786529335270301198511261204490942596620370690421135587371225192270071148482814043187298614245513524574195403838983268825246427166859368338411417014237900890054448582720408002293718588232710103125647747612536016729817411910671001013489751736900843181081587277777333618560665031178928645678095740671383007146931093610507936600632356952130485285323568253200365069373598277465874484064020231576574838393851605535005110740646076238762628040631275301809408880141517606652771526804244864065718299028731547871411410134313417479599993159028770993570139705516020531333759080276762126187515382237611142186866362066989167971004466563470208702215667648804815541508939338618377048243648326252516961687826675482881940042814941598201073600272168473977866883417047386543283276493995348903021144889506778452077566445574699357425338595834832056563431066318696424125453342035797349956471749164241804511456346095201471427929758865834887414405260385232544333186109453208370536297243152549218944453123186421095392891171900759248309258213677384898445716360355154179410995212656385712698120134600957487995363922774414569893206231072187577839186127543166300668346274622903050967254097569174685219494054201295719680482842191427952310708976589028519248027995583649160849413538304326158990892343791199853446952325653793685588905207954237968528837087748288803993378574867284324722940289745802363928980150499989749105568979156555178319972642839757614734839797599997186383778385283653271034004358656945819621031585360328175480194918608328702899317938069479593135435819496587496667074515290241646182271463557655778699253410317754755840104158328912107578694078696428729831089774341045851264595188546294649980874092159717765240523919472087252727290608995749244437442337745623704358666282703803519505695106391239781395610040039898721346228392819917210263179594937600352039326937988019557885031474289764206334061445677296943335274830937290729327655445997437928451340489631017934637492733951812206376540129087029087272707175110211005856161155519419449120544515294743311310032451408636724543475376852209249562962704439761223021345951423089393917342754124186319005812329727777357958245623934928134639440907645938722699664363793002821264161992899399954716838104999249504355862331975109257345051136565903057823554686015233855275968354658320131295231850106193966639855321688337196353643764520535995051037912550688054362365790442895984727813583638310368950478965657509840754280305525802530731445802990202007701585992314683217605356728957010374691075697224884764027941994460297277852711461473648855801904060481368016432216546989107647425741186047032128167373097716646104386401419968107629029431681262342022285660910024990800168491630179550827076250809230702597982656476577281077313177389883681276138147895069067200462894747310308979720658669244392133763486224639860710192733695970597619038093055612323310310410853240485705301794394591163917755579738920134071419882394057061327950100178718720379603320628246298349374401227641394627245218472980267695744013988741274932213976690647791131642488206388206567595419402141237016447928010656708239561680484495923290797505028283076032703960039607809488795629994351682097839219318175242406150397886629285019700085095350670521399194499161694469243516278769240838289448762978094945577028745907871981200987949245944051187347580671160313416702658070628912768153723099547794034435779072889317964898212475536605550836791165504493804845263147052051272550975960010491585407930367763874296253065895924478077672700143360300705843007198115822675147221995555756133300065322180096949725753262252369900597389768855012792373049296379494490761467813697555752230530637558999333816706681660875787233279248175484291351797081841140931724531071144144101671995879459699887135645550480995058909705684333117316409800563091852283970779666804582560346574796554424070922739844793340709846639534110256231832591101679858947440087971721317584797441437425701278009253076283727023128564248378916391300666352634403129621341665810055221012580245857813231946227976877558576096536616004143972650146749972173413928189864166779206513081444217573132171159831140397995701236643705431397027158740266109922643652932555683178153635699584428536814014882971332722178431977962117011094501004594377710531473804501062108300984911564662135098579772104008700513210068599226220448064232191025917034790574535401625789344279649387058066416344075782263081227854186845971976925139822063637820228854140696086228508128452395996132199187879973475271728749706230560274135674806252372554481739121254187370210000218637550606333857637507244256929583116418240677520157529925401359742340036539450505899694753416189523049008298214772590742858214637989564291893236431197375600984307678116491859910694671146773894076639426056392615432067844529166136010357976709801641312164169144100494606426202299365730912693853855199528330546230841186686529762591396961634830895267077385641667532006736179094141220662298301203709292776933337780591666978956856393580987919505516070725368999671281324511200813954327165061676702600625438750401481004692826988620002180987071831027204649185237046865221208180139084103583606483859008715361574088038954834550628204990313497386029376825419588189742587047115885038640212792587718151396929994764642260741251387561155083372937979944243310696408033460939442096667107337856414851439450029163023453006199063075703034133949018016239863581516204860680926788952849731681785997394187635450781581985596443202828344399714570529065177273792579425496669678134440449675821418000962227079079029369025003809932492835299282770858292420208354789024549902706228780358749834942000089942126813010833675676647380304002699603956658300131158204364864707080555262624229462288167582701175301739932524210714009302931297794088354609608999074193614116398254279404896447607921858699587572452919979347051863217063342733101630622258829300271406254366015429307625304697050804307855699759143990006506813663975191659325113130289654742616603321793794701851225743487348140006132679643811094272607906356271932429332991644059260622234943889211745337765747441900680725772328033764369547221924441648212857598792980235418730616243896396965369763080038584697033020283598594998721312753580836929414711657923943291398952286654179807111083318681178043228173727244176137043476883595607671128901863396663373905546549908696832054026235155912504697453221042819095888337544287431409364475672352101331309680011865630808387567181468364414130311694320371049997640096498968955878913730100842935904568973580079969854650309039093571954999293024154415000006015245962333336491861879347903777799170860549400301315036078572175001129805313774658064674282701170311245223778344813535038685413986718551299583998160551801190068094302142208755703960062429838213309200987726402711001002404433372349738514451116707338067188257823892159872483818007048407980256144378862988080508759166892212089914811710668254318218521013496380667818304173213883017919398444893637904332946861451639360580493970874639523235322069640717411180515600062382574011086951253183290329284618930594920710564183359025949535450111182514070537739401269339988298568658965287450621706860523270167652803477184527814529772124329271245169526230843207188229062640604058723834826035154034571386288511997271396971234009504420048701076400587404495280523908227008538970515947439479597570209269881340713975738759814050523103929376403527542727618621958424157989775462813060247202811410301912882771589222656841229984367822051953323934145238175272126474365214480975621430510125407356583010942052711086764528505996601964568321641319056822480710551813898091471744017567575199300040005607792090974258553905060804136932846433017777102901012111055667458639633318873448382281616668869564043144967105218481879103093443567968285232768135333463493720386621223483670218523550701709924570598931235859933954871419611109629419730501999360680537018206364802917090273000692069556357132977049130582464313124942493291526067104999777175787839127341242623611331789357575127643645198741842711783718499950500786292452997044887811728968564840733051010378592794145757585840411759580578166274120936677903737030628690340898620489310800999196198279597642052414552020534271479020235000855910416025948722348706976019911846274080965004600374827939710753586978576677055679036142308357145527462627156985911558994699146661548262575801086304725842990477857100108090444864758540869558290456944832945503598673333440275853713688632982048434190834556528448035456622995046896903957530389632253494037823636931536981968689956254915010245009784095680498257277328670601588405986904715102111130073040255302029787970938178320247441360552880156816939274885735424972008745004504193360485690199736002794515295621856281782064063032872521396145072814699867342683123921783113543237444259428709645429393292508991403588850722859895646139953373759739709003825942461004448593936013920009999308799822033694541421522153945905006671270745497280846593009855332158089719428061990408568563655393524705865817659959766273884050107250598124464453127929778894987701914121909254353357313606199570180365404470690504992362323679000049451087695347722868130431451204198364194587131141689000434723811134800611464372523888937286938264154793307878292521014593400484874976351183688844241690434511534142604648401208352802463445704713449109067478903970550002705765901995819185573732794707389580082029100072375189961321226028058408772125644204972548428091844667389871498990269059968976559974285813320668168731950044549487032214791591008505559367140675894666230533065998641385670951462810224096507640507539704238265031887655982555131331985542572972195487770024136609705279988903402870499288342163807896792180275830225890489945050313681509571503601460074175507217486474791340573124104283675051139994393890844551787194178701840471880334119889982996099528590564689834009799285107327787470117791614603689794707256989541416184177094141974215783217213580016808032703582550741811985227051576742092783617758099021182120285999206966934642492099291359165042400231554978189653960769333048280062752500549904203696539111626386101598903177078630556287903113715519691169523214332368916038928331686632579653724239685353337351601526858281063542349149950027079452410505801537642438057293630572635190198367238626916495923975547769937009907568116286530613784175557040263542105035906614426232421599169671748338098629739372649257049218508053993334035432823739165525351677476517531381815834824219775957250228370462372332725858230099110359805730745067985770111982373977498669686701818767978670033526938345787692536829352944977508645623878121445628788150464399190775426535025014317497136898488795864565487366174925326213140024988764231536976922788471585655639867625996728475857526067277875564169689783612546266311554257700216491187535034925875829102905329274944233469968636344155629741696527179168254685125520511005404388217221292281127149993831453646359647646492816778733005200520622072761154323094832468737204424427250214050545157232172270933070014207622323572924617525945313023008879424830190702209404253313151197488871224628182322671424412205937644565549008868726970827913355335301090710669989971908607550608124077861370823892389257381066852090246012146998230615652556778246863931998162455124127678376745014654200378244418449539824160127619919257446476995201036793699494055799917445445858842896334745241742561198918358332594271041771124590628499922397263710331681073603771302028619697687091250482856477499874650700042843548110035336164064592584297429590099985587043262544065806161429192021768252619059379256580790093829841134641266560887190957217921074704736196930998910513981658670287187871272856330946863100092030873941511615027709721520294989273706260598417334630549585159458810873845999857478501794087003896886330494132960375506089818070339644935043782378677096007952066253281040151700089076568953201107877430003257678972658862362846739500399918213198014278472923299607645952809362683347542739309491932347988485199576428246249916764743301376557468110600323420920055596177820043368097277099051657849420360853912604381590376372442262937816835100071492291917307370331801600400001249357422257365392948203050524630455568129499316056350438534161774828421300508719284905902186970533724476940539413098478904265427434082389221875086397727961968073082705912425007493759813070769060663347113190955097571500175661235594446199211111717506301725410275006860477136134607146275313420321738099254391462343309490102386956389312061948192303894410022286422985060080827277745038117587520520271868266541272499552936301621228065279082793128884350674015167086666484016244370299983335600148525907053963390694611018181829289635197999914870994102269892917077220144875992191261341987960431944369477547783391630001485715413936304955342052833963784704812425261140571247330785502827060223391395410214514751952735358595513563466216694817591712249825544408883802768928905821890245922972291969368108049040085064192995413071085308443297936112425550813668330001723704302142856242012540358563905554785103929763535547952981750638838739218464917519478408783994494163797591473230418712741198160899432304923152146990147877618173249320313888828538209914021720718197412767426156570900734126087892487639865769781135892713258315563944239651449197705399930549495522630083697024707947070805935327811000531000461404511824984019865351636165519767025150485032997585032810458101960153574893697532228456440094805477676202964472727147901784316104379859790890879341859970301117172977564054251574540797955098793218458462801362010346420239371522737945673640500012229860060227350197231026175638891873855454842489380726301422099800798443187936191256981996373366922669076029194187885998309307105871129739215352341434120457655997370489995560824446035739823816405476190191588525841795555795881904761779701312581255206249710885311982702676046123857804775046062357236815343075662785341818581163780289981076805925717028432637414236538671820261387396601922353938062324289140117593025991073935510100557974816281597951330975448123453417399351684633747773045246701615845468171193737293057866107502066777445144084457668370340314848654907881196314799074666266553663630499103977297445393304339104390603119911130691025434647979954872015840991967549889410634309461929045364390561852587205972182629070628083518020376472975993398173091170655825948946498175770570078134054340277957040873999957627958720831575111890901109147655264262383560229608345441496246834730301827431349593316948547616995993616833982569398186079374453295901221494782739013912143276937633072428174648785671820589046282310003188196559935816397082604141519114711067300001475572199922885499785528721315401365772071804307410352198286946271352864645816070119505473928917548285839455578852442299356869471746688881197745831384606606200529438197728542741985750513991022169891447815578193598804126028604159906619486590591131120173013061655419607002400499364062872268250395353983321520737469716872103182844434743841056459199161908537407418651824993322975262797678693512430344293569782192807852286148303400432931439984198550534941984725486462817215734342967212592544001192321280178646694474102535996982115349917332369529491467271393498742383817604398043908641252944902118920340609463226424863916142111199047980046782906496411561047384580318652452121759968206789530707023578529580474049840050579010020673118820609380106047001471377612313534655215652285158293571980942285462952871895475946140129423531143234928998861998000517531373681617159970272969300298889081699953539431286039896313818607761599952905321944852306979100900512027662310236524042425779491146720138267053823464001029424069474817417825764523150812374663134861422655562260957376147905438273028222200678178168204704195582099490864919399945826110433787729189100715757495253952554841376164130542753695632475608367279115350000726345759377747598450595673757270083030400878944486084682675004007357173071357089016002420100813530521106276080660006799607326868705314560887318058591274731787989470443411139474727666246072369149085310909557656740544872369848140324287209041152251135753554882175814260227067319197050525826489127791904772747585884451471778247004399318079701425317773052776735399988210830429992010135563188164159326882591222911249969505912685425202779346496799569609586987735690195824182620910036382886402080530501707774247119701471511094340384001070505631374644807865758571238917763354714474391620930673997941804033393388960832923188140797896944782792876856751029378944957693000452468695739933349970220072575779902042727060006485679495852823599535046492461282437139754339900263148482565492973514184046518452227181348363371840806154706108864223901019419412894459642386299375049213782609414879514694371824804715598182778592958252678593548257116742567040598416906560297080233383599490453854537746158356818126183198452897841258039381938654900910258528522089996906442881392743002598281112128201036539764682080807337402440559628158089356244200103275912451329002311373721203009578072526987019941264366727755460778067061684859135187510993218371213071773042291077740209840166173652142892671340795826221356949142586000195757089127085090562189893612992378892563678493262653015536345914034492997060948198197069863062264149066537330743431469069568962555746189203322570502690869152720637555101057754053983034676707480161157521087980123910721673395305906304807670032910934710455484300535189856561984421544860446041689572710053280486228338634639598138384206968542972934580795136432369376182052293394819384587265502921109617535469132544992317414701146128808657873576531262086820393885100751763163364281934464251637515373501553684856231396700989002636056551727636526724056475359986053296145400649251209202100046674572779655254781182349017139155128090317657848714857981287172916946943634139601500754421872429939168822515130843930269769554573547830756174710383680026518002117051834282168584679730443000672893245972762880935855182014065340284504975946659431266229381790235651915525989674949414308251986004690904715908441229323262978527842824301272869994700004224482278380118729168550923845014558105123886120655512013938854491715516646147128134107625238878274708994359298587375081911495780574631457274702832887221223953137562438578166386818969864796343717024932618048685647893385638657912795585999931782537002004937033269009257509671411635018765619157538115536107979673853265367111663026590518735813975992745115561867815109245941908901260234010293744048080879619520198444558889480343276155070757516240019189829430709092859815402943191499264278205658444357157852812742859773380325686614595340091766902895642869904026443257998961733954016816753415527858886374373877078021839169190004353811482997276158210800318251612493062083496028311328377292820536355341991278094384819094009013198122735356871379531501116307000594072270134154439406937526918386524211993179284889230648843008812829935150366027793148021001411321217307658563104002253853343653621449685147594029366381110021944626623523164991826034992683260386000833714717298981190523549174449127083926990289145337764318428924253777424656906106620902644800303235318700174528116542290564924951989958824449436841932591882912819552664230018765321196050073903941243841411475655521989456445620400349479199297081760814439010951518116825751512884855600364662048901224364318005317037291722903590553254036146310275198415686865454307440646788471959253067766584788921457274528301584569221017701019917128441992098589950162529606652887903508793844585260007537332491857613778355754889538011223054860210742909285741947503121237358893246131827230264803888178048798261889267775252456105570283794960468247078163176427977394061229791802294641393321406355593573745743593086533044355133333177525006720827648690981485711172627067396459499519840069739448346553419029462428646794121299753387344146661248075559662205002344074988282446719689714370032917772476500769074839879292464920857518603688082923806599814576838380160914894950128016571062614136259892020402070102353808078399690163247300210736767149738531359938694843124067261267013526998798253681629189402032258122921262983576398390902326381429396955047933048440166280268912761913324185745270775348988505986388043850045336716786582667717479702840593658208945093602013788586753916419862920781853448465589811418487638378099573425029781948183496903067881529562670983104101637850029254964733991112852928592850723590498395504629987918101151324829543136485659606570611973449917348982038072633237401615964471668246549399096829280655642579504145840671471838126410081610043745199737693286620040057536477888740918174413602345752902337503653137044814091749187110824763197155388627630374301437409022527307110800706278923018529964170568539986012838916810330511723119623029860843060035626788946219943866873237825242914126938113789881155777428702403453798645282500091207744599844095910951150303806299497583085621952479538893975833289393800709904998038846206813274905056292002676312780531418223913182748315491113488632270659332420600347610080617479922027437241243377486228415539417854154699576929830592683788961446826724074069415802121595024600620834458216471515902681629736123139566718728400088686677028943292057662523628943123638062258586861650029032470258185729938884842626111522546227188933372457426288886069837362289159888335272044421729469133796042440870706275590680597536830001418604420683078167898844436975336889851566503440547528392620776233561428211197826079670204659646467935142211634952828283997545882844550066872930023362191173580970167285705400755052627991230188119493809865509499841752346159355265910639120587048296852733536633757785517779056202320325114183683705450402428247291276333723927050961707164001269280431048901407911560246369524156045398784020943242650210144654686543325429470906127655612048275074948208860364792990077992687560072227215125272301306270353873268619912562852853336862796695808888149489705948910835516473585931870163128646593337808780256794538937642692837940662124131207814290997609630944762074587874401659896943988970647294216798567896357813575843630374746049629362765175389959292190499136424609936337301401587892761932302898164918629350837286895461247298807842966591701787556320125964915143762923278811052586938561613428881132449034496286560231993693428153097262977016928740954434427130205615859973254531449336143960939265100463220752347684524631700042809110428611431700003746510151406183314347120165933754392150974573763489037680514527713342209135083459877381955450831289968532900895716038700877014279684012322464605665655293750525517549556781410455626080425768539174609418580499127632893630806134529901405015995944891907861642118624801974119645233806627102855955725429956899385193358483182069980162990769883536691419466779865437551759429203911882662195565384183852875202416918400628087471435165160270350684855675018270765008918284186161730235088047913007723070590018751012473047530114449522844563333800673481004820287364668999174311200088611896373669303449591512392301870600052735435146472125436392290929045988899609655533783038952057621997576929659922060590528137373485870837443417393467037603013501506360379949445739378198976059986059149859458982302403062731014615394823830614534284023357846598999838002831207869926826426536147777221155074664091907619656814735320275901428176273705824741467688010622762198246310704233305844739726920290995662270049761428699697264564244546792655286435657111043957855030359178256335544960180973486146437136974077915079604351421143945932074504980246802744512066781868369926252816585910121948474999190069016451579164531124329325401620838196716986126105502221737021939647982358783336851577673760990039174937144491054779942052343969309339893809260317749496766667052279980771236254005058959927477051518313482227226908100995593127582570199959337190456324989651650375887657999560162702817221301957390166695671698142504234093325615008299828900121082476845691865201243541452873695994540109772492676057555601580076608984700464201673763767905674186887359822977932698919593281001293391477353182686631030732640569323779774277940001627994777333430518020366036344029206462322302164702575202778640300156824018635487820552465613247585041907518740031468589866190471508242079852029158790780721002855788371489718840494959990110639446330054204196313226701452018295541567356416439958859663397424577653098046384367917061735181925736485190166871513977459185261075036587067748062847261364009719655260778113994457298030002209603254729395177604101034827823714297637887325963386095764999752720010899728361210651426139349822581159154366231229758692263168749949516997051393630020355574695178660886645358506247628200763565679210447286964666938640234

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed