Swift – A New Programming Language

Swift - A new Programming Language

C++ rocket vs Swift rocket

We have a C++ rocket which calculates Fibonacci and we have a Swift rocket which calculates also Fibonacci the same way. Both programs to the same. Really? Not really. The C++ does give you wrong numbers for large numbers which the Swift version will crash. Sometimes crashing is better.

Let's assume we have a rocket. A C++ rocket and a Swift rocket.

The C++ Rocket

The C++ rocket program just runs and maybe will also pass some testing. But if the tests not include such large numbers as they may appear in the real world, the C++ Rocket will behave undefined.

With C++ the largest valid number is 1836311903. After this value C++ just continue to run and prints out garbage. So C++ was not able to detect an overflow, which is terrible.

The Swift Rocket

The Swift rocket program also can not handle large numbers, but it crashes and does not provide wrong undefined numbers. So it does not feed the rocket with wrong numbers.

The Swift rocket runs until 7540113804746346429 but then it crashes. This is a very large number. But at least Swift does not produce wrong numbers.

7540113804746346429  <-- Swift calculated Fibonacci value, #92.: OK

 

 

Let's enter not a number

Swift:

$ swift ./fibonacci.uni.swift
Enter the number of terms: abc
fatal error: unexpectedly found nil while unwrapping an Optional value
$

 

C++

$ ./a.out 
Enter the number of terms: abc
0
1
1
$

Terrible, C++ let's "abc" string pass through the int conversion! This is really bad.

 

Sorry about the numbering, I know it's wrong.

Conclusion

C++ does not let you know that you do calculations with wrong numbers.

Source Code

Fibonacci in Swift

import Foundation
// -- Swift: clear output buffer for print all the time. Why is that not the default?
setbuf(__stdoutp, nil);
// -- Swift: has no input() right now built in. This should be there in the Swift Lang
// usage:
// let n_str = input()
// let n = n_str.toInt()!
func input() -> String {
 var keyboard = NSFileHandle.fileHandleWithStandardInput()
 var inputData = keyboard.availableData
 var strData = NSString(data: inputData, encoding: NSUTF8StringEncoding)!
 return strData.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet())
}
// -- Swift: get around mutual dependencies: Put code in the same line. Strange notation.
doMain(); func doMain()
{
  print("Enter the number of terms: ")
  let n_str = input(); let n = n_str.toInt()!
  println("0")
  println("1")
  println("1")
  var first:Int = 1
  var second:Int = 1
  var next:Int = 0
  for var c = 1; c < n; c++
  {
   next = first + second;
   first = second
   second = next
   print(c); 
   print(":")
   print(next); 
   println("") 
  }
  println("")
}

Output

$ swift fibonacci.uni.swift
Enter the number of terms: 100
0
1
1
1:2
2:3
3:5
4:8
5:13
6:21
7:34
8:55
9:89
10:144
11:233
12:377
13:610
14:987
15:1597
16:2584
17:4181
18:6765
19:10946
20:17711
21:28657
22:46368
23:75025
24:121393
25:196418
26:317811
27:514229
28:832040
29:1346269
30:2178309
31:3524578
32:5702887
33:9227465
34:14930352
35:24157817
36:39088169
37:63245986
38:102334155
39:165580141
40:267914296
41:433494437
42:701408733
43:1134903170
44:1836311903
45:2971215073
46:4807526976
47:7778742049
48:12586269025
49:20365011074
50:32951280099
51:53316291173
52:86267571272
53:139583862445
54:225851433717
55:365435296162
56:591286729879
57:956722026041
58:1548008755920
59:2504730781961
60:4052739537881
61:6557470319842
62:10610209857723
63:17167680177565
64:27777890035288
65:44945570212853
66:72723460248141
67:117669030460994
68:190392490709135
69:308061521170129
70:498454011879264
71:806515533049393
72:1304969544928657
73:2111485077978050
74:3416454622906707
75:5527939700884757
76:8944394323791464
77:14472334024676221
78:23416728348467685
79:37889062373143906
80:61305790721611591
81:99194853094755497
82:160500643816367088
83:259695496911122585
84:420196140727489673
85:679891637638612258
86:1100087778366101931
87:1779979416004714189
88:2880067194370816120
89:4660046610375530309
90:7540113804746346429   <-- Number OK.
0 swift 0x0000000102b302b8 llvm::sys::PrintStackTrace(__sFILE*) + 40
1 swift 0x0000000102b30794 SignalHandler(int) + 452
2 libsystem_platform.dylib 0x00007fff89143f1a _sigtramp + 26
3 libsystem_platform.dylib 000000000000000000 _sigtramp + 1995161856
4 libsystem_platform.dylib 0x00000001055f10a8 _sigtramp + 2085278120
5 swift 0x0000000102940944 llvm::MCJIT::runFunction(llvm::Function*, std::__1::vector<llvm::GenericValue, std::__1::allocator<llvm::GenericValue> > const&) + 276
6 swift 0x0000000103c2f3b6 llvm::ExecutionEngine::runFunctionAsMain(llvm::Function*, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, char const* const*) + 1174
7 swift 0x00000001026a61b9 swift::RunImmediately(swift::CompilerInstance&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, swift::IRGenOptions&, swift::SILOptions const&) + 1737
8 swift 0x0000000102419f98 frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 6408
9 swift 0x00000001024184e6 main + 1814
10 libdyld.dylib 0x00007fff82bcd5c9 start + 1
11 libdyld.dylib 0x000000000000000c start + 2101553732
Stack dump:
0. Program arguments: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -interpret fibonacci.uni.swift -target x86_64-apple-darwin14.3.0 -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -color-diagnostics -module-name main 
Illegal instruction: 4

Fibonacci in C++

#include <stdio.h>
#include <math.h>
#include <float.h>
#include <fenv.h>
#include <exception>
#include <iostream>

using namespace std;
using std::overflow_error;

int main(int argc, char *argv[])
{
  cout << "Enter the number of terms: ";
  unsigned long int n; cin >> n;
  cout << 0 << endl << flush;;
  cout << 1 << endl << flush;;
  cout << 1 << endl << flush;;
  int first = 1;
  int second = 1;
  int next = 0;
  for (int c=1; c<=n; c++)
  {
    next = first + second;
    first = second;
    second = next;
    cout << c;
    cout << ":";
    cout << next;
    cout << "" << endl;
  }
  cout << "" << endl;
}
}

Output

$ ./fibonacci 
Enter the number of terms: 100
0
1
1
1:2
2:3
3:5
4:8
5:13
6:21
7:34
8:55
9:89
10:144
11:233
12:377
13:610
14:987
15:1597
16:2584
17:4181
18:6765
19:10946
20:17711
21:28657
22:46368
23:75025
24:121393
25:196418
26:317811
27:514229
28:832040
29:1346269
30:2178309
31:3524578
32:5702887
33:9227465
34:14930352
35:24157817
36:39088169
37:63245986
38:102334155
39:165580141
40:267914296
41:433494437
42:701408733
43:1134903170
44:1836311903
45:-1323752223  <-- WRONG! Minus value!
46:512559680
47:-811192543
48:-298632863
49:-1109825406
50:-1408458269
51:1776683621
52:368225352
53:2144908973
54:-1781832971
55:363076002
56:-1418756969
57:-1055680967
58:1820529360
59:764848393
60:-1709589543
61:-944741150
62:1640636603
63:695895453
64:-1958435240
65:-1262539787
66:1073992269
67:-188547518
68:885444751
69:696897233
70:1582341984
71:-2015728079
72:-433386095
73:1845853122
74:1412467027
75:-1036647147
76:375819880
77:-660827267
78:-285007387
79:-945834654
80:-1230842041
81:2118290601
82:887448560
83:-1289228135
84:-401779575
85:-1691007710
86:-2092787285
87:511172301
88:-1581614984
89:-1070442683
90:1642909629
91:572466946
92:-2079590721
93:-1507123775
94:708252800
95:-798870975
96:-90618175
97:-889489150
98:-980107325
99:-1869596475
100:1445263496

 

Fibonacci with OpenOffice Calc

How does OpenOffice Calc does it? It uses some extended Big Number libraries like Boost, bignum or similar.

Just enter =SUM(B1+B2) and then click and drag the Cell with the formula in it down to Cell 500 or whatever you want to copy the formula.

swift-fibonacci-with-openoffice-calc

First 500 numbers (no warranty 😉

0 0
 1 1
 2 1
 3 2
 4 3
 5 5
 6 8
 7 13
 8 21
 9 34
 10 55
 11 89
 12 144
 13 233
 14 377
 15 610
 16 987
 17 1597
 18 2584
 19 4181
 20 6765
 21 10946
 22 17711
 23 28657
 24 46368
 25 75025
 26 121393
 27 196418
 28 317811
 29 514229
 30 832040
 31 1346269
 32 2178309
 33 3524578
 34 5702887
 35 9227465
 36 14930352
 37 24157817
 38 39088169
 39 63245986
 40 102334155
 41 165580141
 42 267914296
 43 433494437
 44 701408733
 45 1134903170
 46 1836311903
 47 2971215073
 48 4807526976
 49 7778742049
 50 12586269025
 51 20365011074
 52 32951280099
 53 53316291173
 54 86267571272
 55 139583862445
 56 225851433717
 57 365435296162
 58 591286729879
 59 956722026041
 60 1548008755920
 61 2504730781961
 62 4052739537881
 63 6557470319842
 64 10610209857723
 65 17167680177565
 66 27777890035288
 67 44945570212853
 68 72723460248141
 69 117669030460994
 70 190392490709135
 71 308061521170129
 72 498454011879264
 73 806515533049393
 74 1304969544928660
 75 2111485077978050
 76 3416454622906710
 77 5527939700884760
 78 8944394323791460
 79 14472334024676200
 80 23416728348467700
 81 37889062373143900
 82 61305790721611600
 83 99194853094755500
 84 160500643816367000
 85 259695496911123000
 86 420196140727490000
 87 679891637638612000
 88 1100087778366100000
 89 1779979416004710000
 90 2880067194370820000
 91 4660046610375530000
 92 7540113804746350000  <-- WRONG Numbers here and below, IEEE numbers?
 93 12200160415121900000
 94 19740274219868200000
 95 31940434634990100000
 96 51680708854858300000
 97 83621143489848400000
 98 135301852344707000000
 99 218922995834555000000
 100 354224848179262000000
 101 573147844013817000000
 102 927372692193079000000
 103 1500520536206900000000
 104 2427893228399980000000
 105 3928413764606870000000
 106 6356306993006850000000
 107 10284720757613700000000
 108 16641027750620600000000
 109 26925748508234300000000
 110 43566776258854900000000
 111 70492524767089100000000
 112 114059301025944000000000
 113 184551825793033000000000
 114 298611126818977000000000
 115 483162952612010000000000
 116 781774079430988000000000
 117 1264937032043000000000000
 118 2046711111473990000000000
 119 3311648143516980000000000
 120 5358359254990970000000000
 121 8670007398507950000000000
 122 14028366653498900000000000
 123 22698374052006900000000000
 124 36726740705505800000000000
 125 59425114757512700000000000
 126 96151855463018400000000000
 127 155576970220531000000000000
 128 251728825683550000000000000
 129 407305795904081000000000000
 130 659034621587630000000000000
 131 1066340417491710000000000000
 132 1725375039079340000000000000
 133 2791715456571050000000000000
 134 4517090495650390000000000000
 135 7308805952221450000000000000
 136 11825896447871800000000000000
 137 19134702400093300000000000000
 138 30960598847965100000000000000
 139 50095301248058400000000000000
 140 81055900096023500000000000000
 141 131151201344082000000000000000
 142 212207101440105000000000000000
 143 343358302784187000000000000000
 144 555565404224293000000000000000
 145 898923707008480000000000000000
 146 1454489111232770000000000000000
 147 2353412818241250000000000000000
 148 3807901929474030000000000000000
 149 6161314747715280000000000000000
 150 9969216677189310000000000000000
 151 16130531424904600000000000000000
 152 26099748102093900000000000000000
 153 42230279526998500000000000000000
 154 68330027629092400000000000000000
 155 110560307156091000000000000000000
 156 178890334785183000000000000000000
 157 289450641941274000000000000000000
 158 468340976726457000000000000000000
 159 757791618667731000000000000000000
 160 1226132595394190000000000000000000
 161 1983924214061920000000000000000000
 162 3210056809456110000000000000000000
 163 5193981023518030000000000000000000
 164 8404037832974140000000000000000000
 165 13598018856492200000000000000000000
 166 22002056689466300000000000000000000
 167 35600075545958500000000000000000000
 168 57602132235424800000000000000000000
 169 93202207781383200000000000000000000
 170 150804340016808000000000000000000000
 171 244006547798191000000000000000000000
 172 394810887814999000000000000000000000
 173 638817435613191000000000000000000000
 174 1033628323428190000000000000000000000
 175 1672445759041380000000000000000000000
 176 2706074082469570000000000000000000000
 177 4378519841510950000000000000000000000
 178 7084593923980520000000000000000000000
 179 11463113765491500000000000000000000000
 180 18547707689472000000000000000000000000
 181 30010821454963500000000000000000000000
 182 48558529144435400000000000000000000000
 183 78569350599398900000000000000000000000
 184 127127879743834000000000000000000000000
 185 205697230343233000000000000000000000000
 186 332825110087068000000000000000000000000
 187 538522340430301000000000000000000000000
 188 871347450517368000000000000000000000000
 189 1409869790947670000000000000000000000000
 190 2281217241465040000000000000000000000000
 191 3691087032412710000000000000000000000000
 192 5972304273877750000000000000000000000000
 193 9663391306290450000000000000000000000000
 194 15635695580168200000000000000000000000000
 195 25299086886458600000000000000000000000000
 196 40934782466626800000000000000000000000000
 197 66233869353085500000000000000000000000000
 198 107168651819712000000000000000000000000000
 199 173402521172798000000000000000000000000000
 200 280571172992510000000000000000000000000000
 201 453973694165308000000000000000000000000000
 202 734544867157818000000000000000000000000000
 203 1188518561323130000000000000000000000000000
 204 1923063428480940000000000000000000000000000
 205 3111581989804070000000000000000000000000000
 206 5034645418285010000000000000000000000000000
 207 8146227408089080000000000000000000000000000
 208 13180872826374100000000000000000000000000000
 209 21327100234463200000000000000000000000000000
 210 34507973060837300000000000000000000000000000
 211 55835073295300500000000000000000000000000000
 212 90343046356137800000000000000000000000000000
 213 146178119651438000000000000000000000000000000
 214 236521166007576000000000000000000000000000000
 215 382699285659014000000000000000000000000000000
 216 619220451666590000000000000000000000000000000
 217 1001919737325600000000000000000000000000000000
 218 1621140188992190000000000000000000000000000000
 219 2623059926317800000000000000000000000000000000
 220 4244200115309990000000000000000000000000000000
 221 6867260041627790000000000000000000000000000000
 222 11111460156937800000000000000000000000000000000
 223 17978720198565600000000000000000000000000000000
 224 29090180355503400000000000000000000000000000000
 225 47068900554068900000000000000000000000000000000
 226 76159080909572300000000000000000000000000000000
 227 123227981463641000000000000000000000000000000000
 228 199387062373214000000000000000000000000000000000
 229 322615043836855000000000000000000000000000000000
 230 522002106210068000000000000000000000000000000000
 231 844617150046923000000000000000000000000000000000
 232 1366619256256990000000000000000000000000000000000
 233 2211236406303910000000000000000000000000000000000
 234 3577855662560910000000000000000000000000000000000
 235 5789092068864820000000000000000000000000000000000
 236 9366947731425720000000000000000000000000000000000
 237 15156039800290500000000000000000000000000000000000
 238 24522987531716300000000000000000000000000000000000
 239 39679027332006800000000000000000000000000000000000
 240 64202014863723100000000000000000000000000000000000
 241 103881042195730000000000000000000000000000000000000
 242 168083057059453000000000000000000000000000000000000
 243 271964099255183000000000000000000000000000000000000
 244 440047156314636000000000000000000000000000000000000
 245 712011255569819000000000000000000000000000000000000
 246 1152058411884450000000000000000000000000000000000000
 247 1864069667454270000000000000000000000000000000000000
 248 3016128079338730000000000000000000000000000000000000
 249 4880197746793000000000000000000000000000000000000000
 250 7896325826131730000000000000000000000000000000000000
 251 12776523572924700000000000000000000000000000000000000
 252 20672849399056500000000000000000000000000000000000000
 253 33449372971981200000000000000000000000000000000000000
 254 54122222371037600000000000000000000000000000000000000
 255 87571595343018800000000000000000000000000000000000000
 256 141693817714056000000000000000000000000000000000000000
 257 229265413057075000000000000000000000000000000000000000
 258 370959230771132000000000000000000000000000000000000000
 259 600224643828207000000000000000000000000000000000000000
 260 971183874599339000000000000000000000000000000000000000
 261 1571408518427550000000000000000000000000000000000000000
 262 2542592393026880000000000000000000000000000000000000000
 263 4114000911454430000000000000000000000000000000000000000
 264 6656593304481320000000000000000000000000000000000000000
 265 10770594215935700000000000000000000000000000000000000000
 266 17427187520417100000000000000000000000000000000000000000
 267 28197781736352800000000000000000000000000000000000000000
 268 45624969256769900000000000000000000000000000000000000000
 269 73822750993122700000000000000000000000000000000000000000
 270 119447720249893000000000000000000000000000000000000000000
 271 193270471243015000000000000000000000000000000000000000000
 272 312718191492908000000000000000000000000000000000000000000
 273 505988662735923000000000000000000000000000000000000000000
 274 818706854228831000000000000000000000000000000000000000000
 275 1324695516964750000000000000000000000000000000000000000000
 276 2143402371193580000000000000000000000000000000000000000000
 277 3468097888158340000000000000000000000000000000000000000000
 278 5611500259351920000000000000000000000000000000000000000000
 279 9079598147510260000000000000000000000000000000000000000000
 280 14691098406862200000000000000000000000000000000000000000000
 281 23770696554372400000000000000000000000000000000000000000000
 282 38461794961234600000000000000000000000000000000000000000000
 283 62232491515607100000000000000000000000000000000000000000000
 284 100694286476842000000000000000000000000000000000000000000000
 285 162926777992449000000000000000000000000000000000000000000000
 286 263621064469290000000000000000000000000000000000000000000000
 287 426547842461739000000000000000000000000000000000000000000000
 288 690168906931030000000000000000000000000000000000000000000000
 289 1116716749392770000000000000000000000000000000000000000000000
 290 1806885656323800000000000000000000000000000000000000000000000
 291 2923602405716570000000000000000000000000000000000000000000000
 292 4730488062040370000000000000000000000000000000000000000000000
 293 7654090467756930000000000000000000000000000000000000000000000
 294 12384578529797300000000000000000000000000000000000000000000000
 295 20038668997554200000000000000000000000000000000000000000000000
 296 32423247527351500000000000000000000000000000000000000000000000
 297 52461916524905800000000000000000000000000000000000000000000000
 298 84885164052257300000000000000000000000000000000000000000000000
 299 137347080577163000000000000000000000000000000000000000000000000
 300 222232244629420000000000000000000000000000000000000000000000000
 301 359579325206583000000000000000000000000000000000000000000000000
 302 581811569836004000000000000000000000000000000000000000000000000
 303 941390895042587000000000000000000000000000000000000000000000000
 304 1523202464878590000000000000000000000000000000000000000000000000
 305 2464593359921180000000000000000000000000000000000000000000000000
 306 3987795824799770000000000000000000000000000000000000000000000000
 307 6452389184720950000000000000000000000000000000000000000000000000
 308 10440185009520700000000000000000000000000000000000000000000000000
 309 16892574194241700000000000000000000000000000000000000000000000000
 310 27332759203762400000000000000000000000000000000000000000000000000
 311 44225333398004000000000000000000000000000000000000000000000000000
 312 71558092601766400000000000000000000000000000000000000000000000000
 313 115783425999770000000000000000000000000000000000000000000000000000
 314 187341518601537000000000000000000000000000000000000000000000000000
 315 303124944601307000000000000000000000000000000000000000000000000000
 316 490466463202844000000000000000000000000000000000000000000000000000
 317 793591407804151000000000000000000000000000000000000000000000000000
 318 1284057871007000000000000000000000000000000000000000000000000000000
 319 2077649278811150000000000000000000000000000000000000000000000000000
 320 3361707149818140000000000000000000000000000000000000000000000000000
 321 5439356428629290000000000000000000000000000000000000000000000000000
 322 8801063578447430000000000000000000000000000000000000000000000000000
 323 14240420007076700000000000000000000000000000000000000000000000000000
 324 23041483585524200000000000000000000000000000000000000000000000000000
 325 37281903592600900000000000000000000000000000000000000000000000000000
 326 60323387178125000000000000000000000000000000000000000000000000000000
 327 97605290770725900000000000000000000000000000000000000000000000000000
 328 157928677948851000000000000000000000000000000000000000000000000000000
 329 255533968719577000000000000000000000000000000000000000000000000000000
 330 413462646668428000000000000000000000000000000000000000000000000000000
 331 668996615388005000000000000000000000000000000000000000000000000000000
 332 1082459262056430000000000000000000000000000000000000000000000000000000
 333 1751455877444440000000000000000000000000000000000000000000000000000000
 334 2833915139500870000000000000000000000000000000000000000000000000000000
 335 4585371016945310000000000000000000000000000000000000000000000000000000
 336 7419286156446170000000000000000000000000000000000000000000000000000000
 337 12004657173391500000000000000000000000000000000000000000000000000000000
 338 19423943329837700000000000000000000000000000000000000000000000000000000
 339 31428600503229100000000000000000000000000000000000000000000000000000000
 340 50852543833066800000000000000000000000000000000000000000000000000000000
 341 82281144336295900000000000000000000000000000000000000000000000000000000
 342 133133688169363000000000000000000000000000000000000000000000000000000000
 343 215414832505659000000000000000000000000000000000000000000000000000000000
 344 348548520675021000000000000000000000000000000000000000000000000000000000
 345 563963353180680000000000000000000000000000000000000000000000000000000000
 346 912511873855701000000000000000000000000000000000000000000000000000000000
 347 1476475227036380000000000000000000000000000000000000000000000000000000000
 348 2388987100892080000000000000000000000000000000000000000000000000000000000
 349 3865462327928460000000000000000000000000000000000000000000000000000000000
 350 6254449428820550000000000000000000000000000000000000000000000000000000000
 351 10119911756749000000000000000000000000000000000000000000000000000000000000
 352 16374361185569600000000000000000000000000000000000000000000000000000000000
 353 26494272942318600000000000000000000000000000000000000000000000000000000000
 354 42868634127888100000000000000000000000000000000000000000000000000000000000
 355 69362907070206700000000000000000000000000000000000000000000000000000000000
 356 112231541198095000000000000000000000000000000000000000000000000000000000000
 357 181594448268302000000000000000000000000000000000000000000000000000000000000
 358 293825989466396000000000000000000000000000000000000000000000000000000000000
 359 475420437734698000000000000000000000000000000000000000000000000000000000000
 360 769246427201094000000000000000000000000000000000000000000000000000000000000
 361 1244666864935790000000000000000000000000000000000000000000000000000000000000
 362 2013913292136890000000000000000000000000000000000000000000000000000000000000
 363 3258580157072680000000000000000000000000000000000000000000000000000000000000
 364 5272493449209560000000000000000000000000000000000000000000000000000000000000
 365 8531073606282240000000000000000000000000000000000000000000000000000000000000
 366 13803567055491800000000000000000000000000000000000000000000000000000000000000
 367 22334640661774000000000000000000000000000000000000000000000000000000000000000
 368 36138207717265800000000000000000000000000000000000000000000000000000000000000
 369 58472848379039900000000000000000000000000000000000000000000000000000000000000
 370 94611056096305700000000000000000000000000000000000000000000000000000000000000
 371 153083904475346000000000000000000000000000000000000000000000000000000000000000
 372 247694960571651000000000000000000000000000000000000000000000000000000000000000
 373 400778865046997000000000000000000000000000000000000000000000000000000000000000
 374 648473825618648000000000000000000000000000000000000000000000000000000000000000
 375 1049252690665650000000000000000000000000000000000000000000000000000000000000000
 376 1697726516284290000000000000000000000000000000000000000000000000000000000000000
 377 2746979206949940000000000000000000000000000000000000000000000000000000000000000
 378 4444705723234230000000000000000000000000000000000000000000000000000000000000000
 379 7191684930184170000000000000000000000000000000000000000000000000000000000000000
 380 11636390653418400000000000000000000000000000000000000000000000000000000000000000
 381 18828075583602600000000000000000000000000000000000000000000000000000000000000000
 382 30464466237021000000000000000000000000000000000000000000000000000000000000000000
 383 49292541820623600000000000000000000000000000000000000000000000000000000000000000
 384 79757008057644600000000000000000000000000000000000000000000000000000000000000000
 385 129049549878268000000000000000000000000000000000000000000000000000000000000000000
 386 208806557935913000000000000000000000000000000000000000000000000000000000000000000
 387 337856107814181000000000000000000000000000000000000000000000000000000000000000000
 388 546662665750093000000000000000000000000000000000000000000000000000000000000000000
 389 884518773564274000000000000000000000000000000000000000000000000000000000000000000
 390 1431181439314370000000000000000000000000000000000000000000000000000000000000000000
 391 2315700212878640000000000000000000000000000000000000000000000000000000000000000000
 392 3746881652193010000000000000000000000000000000000000000000000000000000000000000000
 393 6062581865071650000000000000000000000000000000000000000000000000000000000000000000
 394 9809463517264660000000000000000000000000000000000000000000000000000000000000000000
 395 15872045382336300000000000000000000000000000000000000000000000000000000000000000000
 396 25681508899601000000000000000000000000000000000000000000000000000000000000000000000
 397 41553554281937300000000000000000000000000000000000000000000000000000000000000000000
 398 67235063181538300000000000000000000000000000000000000000000000000000000000000000000
 399 108788617463476000000000000000000000000000000000000000000000000000000000000000000000
 400 176023680645014000000000000000000000000000000000000000000000000000000000000000000000
 401 284812298108489000000000000000000000000000000000000000000000000000000000000000000000
 402 460835978753503000000000000000000000000000000000000000000000000000000000000000000000
 403 745648276861992000000000000000000000000000000000000000000000000000000000000000000000
 404 1206484255615500000000000000000000000000000000000000000000000000000000000000000000000
 405 1952132532477490000000000000000000000000000000000000000000000000000000000000000000000
 406 3158616788092980000000000000000000000000000000000000000000000000000000000000000000000
 407 5110749320570470000000000000000000000000000000000000000000000000000000000000000000000
 408 8269366108663460000000000000000000000000000000000000000000000000000000000000000000000
 409 13380115429233900000000000000000000000000000000000000000000000000000000000000000000000
 410 21649481537897400000000000000000000000000000000000000000000000000000000000000000000000
 411 35029596967131300000000000000000000000000000000000000000000000000000000000000000000000
 412 56679078505028700000000000000000000000000000000000000000000000000000000000000000000000
 413 91708675472160000000000000000000000000000000000000000000000000000000000000000000000000
 414 148387753977189000000000000000000000000000000000000000000000000000000000000000000000000
 415 240096429449349000000000000000000000000000000000000000000000000000000000000000000000000
 416 388484183426537000000000000000000000000000000000000000000000000000000000000000000000000
 417 628580612875886000000000000000000000000000000000000000000000000000000000000000000000000
 418 1017064796302420000000000000000000000000000000000000000000000000000000000000000000000000
 419 1645645409178310000000000000000000000000000000000000000000000000000000000000000000000000
 420 2662710205480730000000000000000000000000000000000000000000000000000000000000000000000000
 421 4308355614659040000000000000000000000000000000000000000000000000000000000000000000000000
 422 6971065820139780000000000000000000000000000000000000000000000000000000000000000000000000
 423 11279421434798800000000000000000000000000000000000000000000000000000000000000000000000000
 424 18250487254938600000000000000000000000000000000000000000000000000000000000000000000000000
 425 29529908689737400000000000000000000000000000000000000000000000000000000000000000000000000
 426 47780395944676000000000000000000000000000000000000000000000000000000000000000000000000000
 427 77310304634413400000000000000000000000000000000000000000000000000000000000000000000000000
 428 125090700579089000000000000000000000000000000000000000000000000000000000000000000000000000
 429 202401005213503000000000000000000000000000000000000000000000000000000000000000000000000000
 430 327491705792592000000000000000000000000000000000000000000000000000000000000000000000000000
 431 529892711006095000000000000000000000000000000000000000000000000000000000000000000000000000
 432 857384416798687000000000000000000000000000000000000000000000000000000000000000000000000000
 433 1387277127804780000000000000000000000000000000000000000000000000000000000000000000000000000
 434 2244661544603470000000000000000000000000000000000000000000000000000000000000000000000000000
 435 3631938672408250000000000000000000000000000000000000000000000000000000000000000000000000000
 436 5876600217011720000000000000000000000000000000000000000000000000000000000000000000000000000
 437 9508538889419980000000000000000000000000000000000000000000000000000000000000000000000000000
 438 15385139106431700000000000000000000000000000000000000000000000000000000000000000000000000000
 439 24893677995851700000000000000000000000000000000000000000000000000000000000000000000000000000
 440 40278817102283400000000000000000000000000000000000000000000000000000000000000000000000000000
 441 65172495098135000000000000000000000000000000000000000000000000000000000000000000000000000000
 442 105451312200418000000000000000000000000000000000000000000000000000000000000000000000000000000
 443 170623807298553000000000000000000000000000000000000000000000000000000000000000000000000000000
 444 276075119498972000000000000000000000000000000000000000000000000000000000000000000000000000000
 445 446698926797525000000000000000000000000000000000000000000000000000000000000000000000000000000
 446 722774046296497000000000000000000000000000000000000000000000000000000000000000000000000000000
 447 1169472973094020000000000000000000000000000000000000000000000000000000000000000000000000000000
 448 1892247019390520000000000000000000000000000000000000000000000000000000000000000000000000000000
 449 3061719992484540000000000000000000000000000000000000000000000000000000000000000000000000000000
 450 4953967011875060000000000000000000000000000000000000000000000000000000000000000000000000000000
 451 8015687004359600000000000000000000000000000000000000000000000000000000000000000000000000000000
 452 12969654016234700000000000000000000000000000000000000000000000000000000000000000000000000000000
 453 20985341020594300000000000000000000000000000000000000000000000000000000000000000000000000000000
 454 33954995036828900000000000000000000000000000000000000000000000000000000000000000000000000000000
 455 54940336057423200000000000000000000000000000000000000000000000000000000000000000000000000000000
 456 88895331094252100000000000000000000000000000000000000000000000000000000000000000000000000000000
 457 143835667151675000000000000000000000000000000000000000000000000000000000000000000000000000000000
 458 232730998245927000000000000000000000000000000000000000000000000000000000000000000000000000000000
 459 376566665397603000000000000000000000000000000000000000000000000000000000000000000000000000000000
 460 609297663643530000000000000000000000000000000000000000000000000000000000000000000000000000000000
 461 985864329041133000000000000000000000000000000000000000000000000000000000000000000000000000000000
 462 1595161992684660000000000000000000000000000000000000000000000000000000000000000000000000000000000
 463 2581026321725800000000000000000000000000000000000000000000000000000000000000000000000000000000000
 464 4176188314410460000000000000000000000000000000000000000000000000000000000000000000000000000000000
 465 6757214636136250000000000000000000000000000000000000000000000000000000000000000000000000000000000
 466 10933402950546700000000000000000000000000000000000000000000000000000000000000000000000000000000000
 467 17690617586683000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 468 28624020537229700000000000000000000000000000000000000000000000000000000000000000000000000000000000
 469 46314638123912600000000000000000000000000000000000000000000000000000000000000000000000000000000000
 470 74938658661142300000000000000000000000000000000000000000000000000000000000000000000000000000000000
 471 121253296785055000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 472 196191955446197000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 473 317445252231252000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 474 513637207677450000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 475 831082459908702000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 476 1344719667586150000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 477 2175802127494850000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 478 3520521795081000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 479 5696323922575860000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 480 9216845717656860000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 481 14913169640232700000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 482 24130015357889600000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 483 39043184998122300000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 484 63173200356011900000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 485 102216385354134000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 486 165389585710146000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 487 267605971064280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 488 432995556774426000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 489 700601527838707000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 490 1133597084613130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 491 1834198612451840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 492 2967795697064970000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 493 4801994309516810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 494 7769790006581780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 495 12571784316098600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 496 20341574322680400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 497 32913358638779000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 498 53254932961459400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 499 86168291600238300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 500 139423224561698000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Helpful?

Leave a Reply

Your email address will not be published. Required fields are marked *