Hướng dẫn sử dụng phần mềm themis chấm điểm pascal năm 2024

Bạn đang xem 20 trang mẫu của tài liệu "SKKN Sử dụng phần mềm chấm bài Themis góp phần nâng cao chất lượng bồi dưỡng học sinh giỏi Tin học 9", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

sự thành công của mình trong sự nghiệp giáo dục và sự tiến bộ nghề nghiệp đối với xã hội. Để học tốt môn ngôn ngữ lập trình Pascal học sinh cần được hình thành và rèn luyện tư duy lập trình, việc hình thành và rèn luyện được giáo viên chú trọng thường xuyên thông qua một số bài toán đơn giản nhưng đòi hỏi phải có sự vận dụng tư duy của học sinh. Phần mềm Themis là phầm mềm chấm bài tự động là công cụ hỗ trợ quan trọng của giáo viên và ban giám khảo các kì thi lập trình, phần mềm có 2 nhiều ưu điểm như: Tự động hóa các thao tác cho điểm, quá trình cho điểm hoàn toàn khách quan, Giáo viên chấm bài của học sinh hoàn toàn tự động nên tiết kiệm được thời gian đọc code đồng thời phát hiện được các giải thuật sáng tạo của học sinh. Học sinh có thể tự luyện tập và dùng phần mềm để chấm điểm mà không cần tới việc đọc code của giáo viên. 2.3.Đối tượng và phạm vi nghiên cứu Học sinh đã và đang học lớp 8 và giáo viên tham gia bồi dưỡng học sinh giỏi lớp 9 tại trường THCS Trần Quang Khải.

  1. Cơ sở pháp lý Thi học sinh giỏi là phong trào mũi nhọn của các trường THCS nói riêng và của các Phòng GD&ĐT, Sở GD&ĐT nói chung, và hằng năm, Phòng và Sở giáo dục đào tạo đều tổ chức thi học sinh giỏi môn tin học cấp thị xã, cấp Tỉnh. Hội đồng đội tổ chức thi tin học trẻ không chuyên cấp thị xã và cấp Tỉnh và nội dung thi học sinh giỏi tin học chính là ngôn ngữ lập trình mà các em được học ở môn tin học lớp 8.
  2. Thực trạng: Trong 4 năm học môn tin học ở cấp THCS thì năm học lớp 8 các em sẽ được học ngôn ngữ lập trình, mà cụ thể là ngôn ngữ lập trình Pascal, đây là một chương trình khó nhất trong các chương trình mà các em được học ở cấp THCS. Để học sinh học tốt môn tin học thì đòi hỏi nhà trường phải có trang bị đủ máy vi tính và các em cũng phải có máy vi tính ở nhà. Các năm gần đây trường THCS Trần Quang Khải đã trang bị phòng máy vi tính hiện đại đáp ứng tốt cho việc dạy học. Tuy nhiên, về phần học sinh vì là con em của nông dân, gia đình còn khó khăn nên nhiều em không có máy vi tính ở nhà gây khó khăn cho việc tự học của các em. Nhiều học sinh chưa được hình thành tư duy lập trình thường học trước quên sau, học sau thì quên trước, do các em chưa nắm chắc cơ bản nên càng học càng rối, dẫn đến những bài đã làm rồi có khi giáo viên cho làm lại hoặc cho dạng tương tự thì lại không làm được. Theo qui định của Sở GD&ĐT thì việc chấm bài thi học sinh giỏi môn tin học sẽ được thực hiện trên máy và dùng phần mềm Themis (nghĩa là giám khảo chuẩn bị sẵn test và đưa bài thực hành của học sinh cho máy vi tính chấm), vì vậy trong quá trình làm bài các em chỉ cần sơ suất nhỏ (ví dụ khai báo dữ liệu không đủ lớn), bài làm không xử lý được hết test thì sẽ bị điểm thấp. 3
  3. Mô tả sáng kiến: 5.1. Về nội dung của sáng kiến: Nội dung của sáng kiến là nêu lên các kinh nghiệm trong việc sử dụng phần mềm chấm bài Themis để góp phần nâng cao chất lượng bồi dưỡng học sinh giỏi môn tin học 9. Sáng kiến giúp cho giáo viên tiết kiệm nhiều thời gian khi chấm bài (code) của học sinh, tạo tác phong làm việc chuyên nghiệm, khoa học. Sáng kiến nhằm giúp cho học sinh có tư duy lập trình, giúp các em giải các bài toán về lập trình tốt hơn, các em có hứng thú hơn khi học lập trình, không còn thấy môn học khô khan, khó, đặc biệt là các em học sinh giỏi sẽ tìm ra các giải pháp để giải các đề thi một cách trọn vẹn và làm được hết các test cũng như yêu cầu mà đề đưa ra. 5.1.1. Hình thành lòng yêu thích học lập trình Giáo viên cần tạo cho học sinh lòng yêu thích học lập trình thông qua việc giới thiệu một số người thành đạt trên thế giới nhờ học giỏi về tin học và được học lập trình từ nhỏ như tỉ phú Bill Gates - tác giả và chủ tịch tập đoàn Microsoft, hãng phần mềm khổng lồ; Mark Elliot Zuckerberg là một nhà lập trình máy tính người Mỹ, đồng sáng lập của Facebook; Larry Page và Sergey Brin sáng lập Google từ năm 1998... Giởi thiệu cho học sinh xem các video nói về việc dạy học lập trình từ nhỏ cho học sinh tiểu học, ứng dụng lập trình pascal để điều khiển Robot....các video nói về lợi ích của việc học lập trình Thời sự VTV1 nói về tác dụng của học lập trình: https://youtu.be/cVs- wqwCoQ8 Vì sao phải dạy lập trình cho con từ nhỏ: https://youtu.be/7RlumXKoEXY Tại sao mọi người nên học lập trình: https://youtu.be/OQAnhML3Q8g Hào hứng ứng dụng thuật toán pascal để lập trình Robot: https://dantri.com.vn/giao-duc-khuyen-hoc/hao-hung-ung-dung-thuat-toan- pascal-de-lap-trinh-robot-20160411071310523.htm 5.1.2. Sử dụng phần mềm Themis 5.1.2.1. Giới thiệu về phần mềm: Themis là phần mềm chấm bài tự động được phát triển theo yêu cầu của Cục Khảo thí và Kiểm định chất lượng giáo dục, Bộ Giáo dục và Đào tạo. Sản phẩm được thiết kế phục vụ ký thi học sinh giỏi Quốc gia hàng năm, nhưng 4 hoàn toàn có thể sử dụng trong tất cả các kì thi và bài kiểm tra tin học dùng cơ chế chấm điểm tự động và bằng bộ test. 5.1.2.2. Cài đặt Themis: Tải phần mềm về tại địa chỉ: https://drive.google.com/file/d/1hz_QkTicnB7pHoR4M51fL5LMLucMU38l/view?usp=sharing Hoặc link rút gọn: Nháy đúp vào tệp tin ThemisInstaller.exe và cài đặt bình thường, tương đối đơn giản. Cấu hình và cho điểm từng bài thi (nếu cần): Nháy chuột phải vào tên bài thi và chọn cấu hình bài thi 5.1.2.3. Chuẩn bị 1 kì thi
  4. Các bước thực hiện Chuẩn bị thư mục mang tên kì thi 5 Trong thư mục này chứa 2 thư mục con là Đáp án và Thí Sinh, thư mục đáp án chứa thư mục mang tên các đề thi và bộ test đáp án gồm file input và file output. Thư mục Thí sinh chứa các thư mục con là Số báo danh của thí sinh trong mỗi số báo danh lại chứa các tệp tin .pas là bài thi của học sinh. 6 Ví dụ tạo thư mục kì thi 01 để chứa đáp án bài thi và các bài làm của học sinh: KÌ THI 01 ĐÁP ÁN BÀI 1 TEST01 BAI1.INP BAI1.OUT TEST02 BAI1.INP BAI1.OUT TEST03 BAI1.INP BAI1.OUT ... BÀI 2 TEST01 BAI2.INP BAI2.OUT TEST02 BAI2.INP BAI2.OUT TEST03 BAI2.INP BAI2.OUT ... .... THÍ SINH SBD01 BAI1.PAS BAI2.PAS BAI3.PAS ... SBD02 BAI1.PAS BAI2.PAS BAI3.PAS ... SBD03 BAI1.PAS BAI2.PAS BAI3.PAS ... ... KÌ THI 02 ... 7
  5. Xem điểm và báo cáo kết quả

    Phần mềm chấm và hiện kết quả điểm từng bài, điểm tổng cộng. Đối với những bài bị lỗi thì hiện kí tự đặc biệt. Ví dụ: bảng chấm điểm kiểm tra học kì 2 của nửa lớp 82 năm học 2019 – 2020 Đối với các bài có kí tự đặc biệt thì giáo viên kiểm tra lại bằng tay, để xem mức độ làm bài của học sinh. Sau đây là 2 trường hợp lỗi thường xảy ra đối với bài làm của học sinh Một là học sinh chưa làm bài ví dụ bài 4 ở máy 10 Hai là bài dịch bị lỗi ví dụ bài 4 ở máy 9 Bài 3 ở máy 9 thì bài làm không qua được hết các test nên không đạt điểm tối đa chỉ đạt 1,5/2. Còn bài 1 ở máy 9 thì không bị lỗi gì nhưng làm không đúng nên bị điểm 0/4. 8 Đây là trường hợp không có bài của học sinh (do học sinh chưa làm bài này) Đây là trường hợp dịch bị lỗi: Khi bài làm của học sinh còn lỗi biên dịch, học sinh chưa chạy được chương trình mà đã nộp bài 9 5.1.3. Cách tạo bộ test cho mỗi bài tập, đề thi 5.1.3.1. Sự cần thiết phải có bộ Test Bộ test có vai trò cực kì quan trọng, bộ test giúp phần mềm kiểm tra và chấm bài của học sinh theo tiêu chuẩn do giáo viên đưa ra. Khi tạo bộ test giáo viên cần tính hết các trường hợp mà học sinh có thể mắc phải sai lầm ví dụ như khai báo biến có kiểu dữ liệu nhỏ, các trường hợp số âm, các trường hợp số rất nhỏ, rất lớn,... Thông thường mỗi bài tập có từ 10 đến 20 bộ test. Một số trường hợp thì ít nhất phải có 5 bộ test. Nếu bộ test không chuẩn, không lường hết trường hợp thì giải thuật của học sinh không chính xác vẫn đạt điểm tối đa. Vì vậy bộ test có vai trò cực kì quan trọng. 5.1.3.2. Cấu trúc bộ test Mỗi bài đều có trúc bộ test như sau: (1 phần của ví dụ ở trên) BÀI 1 TEST01 BAI1.INP BAI1.OUT TEST02 BAI1.INP BAI1.OUT TEST03 BAI1.INP BAI1.OUT ... Trong đó các tệp BAI1.INP Là dữ liệu nhập vào, ứng với nó BAI1.OUT là dữ liệu xuất ra. Phần mềm sẽ căn cứ vào bộ test chuẩn này để chấm bài. Nếu khớp thì sẽ cho điểm phần test đó, nếu không khớp thì test đó bị 0 điểm. 10 5.1.3.3. Xây dựng bộ test Muốn xây dựng bộ test thì giáo viên cần có code đáp án (chương trình) của bài thi. Rồi từ đó nhập các dữ liệu vào (tạo file BAI1.inp) lường hết các trường hợp và thu được dữ liệu ra (chương trình tạo file BAI1.OUT) 5.1.4. Ví dụ một số bài tập và bộ test Bài 1: Cặp số có tích lớn nhất Cho dãy gồm N số nguyên A1, A2, ... , AN. Hãy tìm cặp số Ai, AJ (1<=i

    j<=N) sao cho tích của chúng là lớn nhất. Ví dụ với dãy số: 3, 4, 1, 2, 3,

    9, 1, 3 thì hai số được chọn là 4 và 9 vì tích của chúng 4 x 9 =36 là lớn nhất. Dữ liệu vào: Từ tệp văn bản BAI1.INP gồm:
  6. Dòng đầu tiên ghi số nguyên N (2<=N<=107)
  7. Dòng thứ hai ghi N số nguyên, A1, A2, ... , AN. Có giá trị tuyệt đối không vượt quá 109. Kết quả: ghi vào tệp văn bản BAI2.OUT một số nguyên duy nhất là tích lớn nhất tìm được. Ví dụ: BAI1.INP BAI2.OUT 8 3 4 1 2 3 9 1 3 36 Khi giải bài này học sinh sẽ nghĩ ngay đến phương án vét cạn là dùng 2 vòng lặp for để xét hết tất cả các cặp số Max:=lowlongint; For i:=1 to n do For j:=1 to n do If (ij) and(a[i]*a[j]>max) then max:=a[i]*a[j]; Tuy nhiên với số lượng phần tử lớn thì cách làm trên không đảm bảo thời gian. Do đó, không đạt được điểm tối đa, mà đối với bộ test nhỏ học sinh nhập bằng tay sẽ không phát hiện được vấn đề. Nếu giáo viên tạo bộ test lớn thì khi chấm bài học sinh sẽ không đạt điểm tối đa từ đó hướng dẫn học sinh tìm cách giải khác, tối ưu hơn cho bài toán trên. 11 Để giải bài toán trên thì ta cần tìm tích 2 phần tử lớn nhất, gọi là tích 1, và tìm tích 2 phần tử bé nhất (để phòng trường hợp là 2 số đều âm, thì tích của chúng ra số dương nên cũng có thể là lớn nhất) gọi là tích 2, kết quả bài toán chính là số lớn nhất của tích 1 và tích 2. Để tìm 2 phần tử lớn nhất thì ta dùng cách sắp xếp 2 phần tử lớn nhất ra đầu, sau đó để tìm 2 phần tử nhỏ nhất thì ta cũng sắp xếp 2 phần tử nhỏ nhất ra đầu. Use math; var a:array[1..100000]of longint; i,n,t,tich1,tich2,j:longint; f:text; begin assign(f,'BAI1.inp'); reset(f); readln(f,n); for i:=1 to n do read(f,a[i]); close(f); for i:=1 to 2 do for j:=i+1 to n-1 do if a[i]<=a[j] then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; end; tich1:=a[1]*a[2]; for i:=1 to 2 do for j:=i+1 to n-1 do if a[i]>=a[j] then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; end; tich2:=a[1]*a[2]; assign(f,'BAI1.OUT'); Rewrite(f); write(f,max(tich1,tich2)); close(f); readln end. Xây dựng bộ test Khi xây dựng bộ test cần lưu ý đầy đủ các trường hợp 12 Test có 2 số dương có tích lớn nhất Test có 2 số âm có tích lớn nhất Test có số lượng phần tử rất lớn cụ thể là 100000 phần tử Test BAI1.INP BAI1.OUT 01 5 1 9 3 4 5 45 02 10 1 4 -6 2 -5 5 2 2 -8 2 48 03 .. 04 100000 Bộ test lớn có 100000 phần tử trong đó có 2 số dương có tích lớn nhất. (vì số lượng phần tử nhiều nên tôi không thể đưa test vào đây) 05 100000 Bộ test lớn có 100000 phần tử trong đó có 2 số âm có tích lớn nhất. Đoạn code tạo test lớn: (Tạo test gồm 100000 phần tử nhận giá trị ngẫu nhiên từ -1000 đến 1000 uses crt; var n,i:longint; f:text; begin randomize; assign(f,'BAI1.inp'); rewrite(f); writeln(f,100000); for i:=1 to 100000 do write(f,random(1001)-random(1001),' '); close(f); end. Bài 2: Đoạn con có tổng lớn nhất Đề bài: Nhập mảng gồm n phần tử (0<n<=1000), các phần tử nhận giá trị số nguyên (-109<a[i]<109). Tìm đoạn mảng con có tổng lớn nhất Dữ liệu vào: Từ tệp tin BAI2.INP gồm 2 dòng, dòng 1 là số nguyên n và dòng 2 là n số nguyên Dữ liệu ra: Vào tệp tin BAI2.OUT Gồm 2 dòng, dòng 1 là tổng lớn nhất, dòng 2 là đoạn con có tổng lớn nhất, nếu có nhiều đoạn con thì xuất đoạn con có chỉ số đầu nhỏ nhất Ví dụ: 13 BAI2.INP BAI2.OUT 7 1 2 -4 3 5 -1 3 10 3 5 -1 3 Giáo viên cần giải bài trên để có code xây dựng bộ test: var a:array[1..1000]of longint; n,i,j,d,c,s,max:longint; f:text; Begin Assgin(f,’BAI2.inp’); Reset(f); read(f,n); for i:=1 to n do read(f,a[i]); close(f); max:=low(longint); for i:=1 to n do begin s:=a[i]; for j:=i to n do begin if ij then s:=s+a[j]; if s>max then begin max:=s;d:=i;c:=j;end; end; end; assign(f,’BAI2.OUT’); rewrite(f); writeln(f,max); for i:=d to c do write(f,a[i],' '); close(f); end. Xây dựng bộ test Khi xây dựng bộ test cần lưu ý đầy đủ các trường hợp Test có đoạn con là 1 số dương lớn nhất (03) Test có đoạn con là 1 số âm lớn nhất (04) Test toàn số dương (05) Test toàn số âm (04) Test có số âm và dương (01, 02) Test có 2 đoạn có tổng bằng nhau(06) 14 Test BAI2.INP BAI2.OUT 01 7 1 2 -4 3 5 -1 3 10 3 5 -1 3 02 21 1 2 -4 3 5 -1 3 1 2 -4 3 5 -30 3 1 2 -4 3 5 -1 3 17 3 5 -1 3 1 2 -4 3 5 03 13 -8 -9 6 5 4 -8 -9 5 8 7 -100 80 -100 80 80 04 3 -8 -2 -9 -2 -2 05 3 1 2 3 6 1 2 3 06 9 -1 2 3 4 -10 5 2 2 -4 9 2 3 4 Bài 3: Phép cộng không nhớ Bài tập về nhà của Tý trong môn Toán là phép tính có dạng: N+K=M Trong đó N và K đã biết và M là số cần tìm. Rất nhanh chóng Tý tìm được M. Tuy nhiên Tý lại nghĩ đến kết quả sẽ thế nào nếu phép tính N+K là phép cộng không nhớ, nghĩa là với 2 chữ số a và b thì kết quả của a+b sẽ bị bỏ đi chữ số hàng chục (nếu có). Ví dụ: 8+9=7; 3+2=5; 8+3=1 Yêu cầu: Với hai số tự nhiên N và K có cùng số lượng chữ số, hãy tìm M sao cho N+K=M với phép cộng không nhớ. Dữ liệu vào: Từ tệp văn bản CONG.INP chứa 2 số N và K cách nhau bằng 1 dấu cách (N, K  109). Kết quả: Ghi vào tệp văn bản CONG.OUT số nguyên M. Ví dụ: CONG.INP CONG.OUT 612 401 13 896 426 212 111 999 0 15 Giáo viên cần giải bài trên để có code xây dựng bộ test : var f,g:text; N,K,M,x,y:longint; Begin assign(f,'CONG.INP'); reset(f); assign(g,'CONG.OUT'); rewrite(g); readln(f,N,K); close(f); M:=0; while N>0 do begin x:=N mod 10; y:=K mod 10; M:=M*10+(x+y) mod 10; K:=K div 10; N:=N div 10; end; N:=0; While M>0 do begin N:=N*10+M mod 10; M:=M div 10; end; writeln(g,N); close(g); end. Khi xây dựng bộ test cần lưu ý đầy đủ các trường hợp từ số nhỏ có 1 chữ số đến số lớn 109 Test BAI3.INP BAI3.OUT 01 1 1 2 02 8 9 7 03 111 999 0 04 545 847 382 05 4237 6236 463 06 64590 38439 92929 07 437587 297535 624012 08 891773 567130 358803 09 96366277 27265630 13521807 10 383441522 477665112 750006634 16 Đối với bài toán về dãy số có có nhiều phần tử, cần bộ test lớn thì giáo viên có thể dùng pascal để tạo các thư mục chứa test để tiết kiệm thời gian, xem ví dụ ở bài 4 dưới đây: Bài 4: Hộp kẹo thần kỳ Tý rất thích ăn kẹo thần kỳ không chỉ vì vị ngọt mà kẹo thần kỳ còn tăng sức mạnh cho Tý. Tý có N hộp kẹo thần kỳ, các hộp được đánh số từ 1 đến N, hộp thứ i có ai viên kẹo. Trong N ngày tới, mỗi ngày Tý chỉ được mở một hộp kẹo và ăn hết số kẹo trong hộp đó. Nếu ngày thứ k Tý ăn hết hộp kẹo có x viên thì sức mạnh của Tý tăng lên x.10k đơn vị sức mạnh. Ví dụ: Tý có 3 hộp kẹo, số viên kẹo trong mỗi hộp lần lượt là 4 3 5. Nếu ngày thứ nhất Tý ăn hết kẹo ở hộp thứ nhất, ngày thứ 2 ăn hết kẹo ở hộp thứ 2, ngày thứ 3 ăn hết kẹo ở hộp thứ 3 thì tổng sức mạnh mà Tý nhận được là 4.10+3.100+5.1000=5340 đơn vị sức mạnh. Tuy nhiên, nếu ngày thứ nhất Tý ăn hết kẹo ở hộp thứ 2, ngày thứ 2 ăn hết kẹo ở hộp thứ nhất, ngày thứ 3 ăn hết kẹo ở hộp thứ 3 thì tổng sức mạnh mà Tý nhận được là 3.10+4.100+5.1000=5430 đơn vị sức mạnh. Yêu cầu: Hãy cho biết số lượng viên kẹo Tý ăn ở mỗi ngày là bao nhiêu để tổng sức mạnh tăng lên sau N ngày là lớn nhất? Dữ liệu vào: Từ tệp văn bản BAI4.INP gồm:  Dòng đầu tiên ghi số nguyên dương N (N103).  Dòng thứ 2 ghi N số nguyên dương, với số thứ i là ai (i = 1..N; ai  104) là số viên kẹo ở hộp thứ i. Kết quả: Ghi vào tệp văn bản BAI4.OUT gồm N số nguyên, trong đó số thứ k là số lượng viên kẹo Tý ăn ở ngày thứ k (k = 1..N). Ví dụ: BAI4.INP BAI4.OUT 3 4 3 5 3 4 5 Bài này thực chất là sắp xếp mảng theo chiều tăng dần, code dùng để tạo các thư mục chứa và tệp BAI4.INP như sau: Chương trình dưới đây dùng để tạo 5 tệp BAI4.INP ngẫu nhiên, mỗi tệp BAI4.INP trong các thư mục test...gồm 2 dòng: dòng đầu là số lượng phần tử của dãy số, dòng thứ 2 là giá trị của các phần tử nhận giá trị ngẫu nhiên. 17 const n:array[0..9] of longint=(10,20,60,100,120); var t,i:longint; s:string; f:text; begin randomize; for t:=0 to 4 do begin str(t,s); s:='test'+s; mkdir(s); s:=s+'/BAI4.inp'; assign(f,s); rewrite(f); writeln(f,n[t]); for i:=1 to n[t] do write(f,random(n[t]*10)+1,' '); close(f); end; end. Ghi chú: Hàm mkdir(s) dùng để tạo thư mục s Lưu ý: lúc này trong thư mục các test0 đến test4 chỉ chứa các file BAI4.INP Để tạo file BAI4.OUT ta cần chạy đoạn chương trình sau (đây cũng gần là đáp án của bài) var n,i,j,tg,t:longint; a:array[1..1000] of longint; f,g:text; s:string; begin for t:=0 to 4 do begin str(t,s); s:='test'+s+’\’; assign(f,s+'BAI4.INP'); reset(f); assign(g,s+'BAI4.OUT'); rewrite(g); readln(f,n); for i:=1 to n do read(f,a[i]); for i:=1 to n-1 do for j:=i+1 to n do if a[i]>a[j] then begin tg:=a[i]; a[i]:=a[j]; a[j]:=tg; end; for i:=1 to n do write(g,a[i],' '); close(f); close(g); end; end. 18 Test BAI4.INP BAI4.OUT 0 10 71 65 28 37 9 15 43 39 99 64 9 15 28 37 39 43 64 65 71 99 1 20 176 84 117 164 65 187 22 194 177 99 85 188 2 106 75 79 183 79 88 88 2 22 65 75 79 79 84 85 88 88 99 106 117 164 176 177 183 187 188 194 2 60 367 452 32 227 476 289 292 515 218 79 55 466 115 447 5 232 18 379 471 294 171 580 67 269 509 293 450 528 466 423 462 566 524 431 329 231 461 294 212 180 209 258 389 171 42 362 116 328 98 530 323 58 49 98 584 587 215 481 529 296 5 18 32 42 49 55 58 67 79 98 98 115 116 171 171 180 209 212 215 218 227 231 232 258 269 289 292 293 294 294 296 323 328 329 362 367 379 389 423 431 447 450 452 461 462 466 466 471 476 481 509 515 524 528 529 530 566 580 584 587 3 100 107 786 490 178 304 969 703 852 399 119 162 279 366 120 466 666 674 632 609 899 496 722 654 419 149 510 332 638 925 501 824 960 275 416 781 914 220 210 149 647 176 544 881 661 926 14 514 575 57 373 625 125 40 890 311 216 917 662 436 820 772 668 394 496 274 515 292 804 449 350 20 704 217 556 330 686 672 925 550 205 244 771 58 510 634 340 160 599 375 589 374 858 738 949 772 692 242 931 333 87 14 20 40 57 58 87 107 119 120 125 149 149 160 162 176 178 205 210 216 217 220 242 244 274 275 279 292 304 311 330 332 333 340 350 366 373 374 375 394 399 416 419 436 449 466 490 496 496 501 510 510 514 515 544 550 556 575 589 599 609 625 632 634 638 647 654 661 662 666 668 672 674 686 692 703 704 722 738 771 772 772 781 786 804 820 824 852 858 881 890 899 914 917 925 925 926 931 949 960 969 4 120 650 934 152 129 196 486 93 447 110 401 594 359 1143 869 932 418 777 165 672 113 764 624 6 356 75 515 820 674 449 476 810 943 808 584 1150 872 174 260 164 94 102 1100 577 579 1086 408 1035 528 661 893 1017 240 487 1100 1154 31 200 376 565 894 1133 123 338 497 1116 524 792 521 19 284 408 780 1117 782 137 916 605 841 553 455 113 268 684 212 1118 712 744 862 957 326 477 571 388 980 1051 838 522 322 630 10 502 109 88 314 913 304 605 804 200 385 898 857 1058 15 1144 1021 1107 727 426 130 6 10 15 19 31 75 88 93 94 102 109 110 113 113 123 129 130 137 152 164 165 174 196 200 200 212 240 260 268 284 304 314 322 326 338 356 359