AP Computer Science Tips

AP Computer Science Tips

We are all consumers of computer science. Whether we hail an Uber ride, play a game, attend a remote class, or post to social media, we are consuming code.  If you want to be a producer instead of a consumer, AP® Computer Science is the course for you! Computer science teaches computational thinking and the 21st century skills that are essential for the STEM pipeline. Companies want people who can apply programming skills to solve problems. Taking AP® Computer Science will give you these skills.

There are two different AP® Exams in Computer Science. The AP® Computer Science A exam uses the programming language Java. The AP® Computer Science Principles exam is not language specific. In addition to traditional questions, there is a performance task where you will develop a computer program and communicate what your code does. 

Read on to learn how to study for the AP® Computer Science exam and AP® Computer Science tips that will help you develop an AP® Computer Science study plan and gain a top score!

Overall How to Study for AP® Computer Science: 9 Tips for 4s and 5s

Tips for the AP® Computer Science A Exam

1. Know the format of the exam.

The AP® Computer Science A exam is 3 hours long and consists of two sections: multiple-choice and free-response. On the multiple-choice section, you have 1 hour and 30 minutes to answer 40 questions. For the free-response section, you have 1 hour and 30 minutes to answer 4 questions. Keep in mind that both sections are given equal weight, so they are both equally important to your overall exam score.

The AP® Computer Science Principles exam consists of two sections: There is a traditional multiple-choice section taken in May and a performance task which is completed over the course of the year.  On the multiple-choice section, you have 2 hours to answer 70 questions. The performance tasks involve writing a computer program to solve a problem and submitting a digital portfolio of your work. The digital portfolio consists of a video, written responses, and the actual code.

2. Be aware of the goals of the exam.

According to the College Board’s Computer Science A Course Description, the goals of the AP® CS course include:

  • Designing programs and developing algorithms to solve problems.
  • Using logic to determine the output, value, or result of given program code given initial values.
  • Writing and implementing program code.
  • Running, testing, and debugging programming code including analyzing program code for correctness, equivalence, and errors.
  • Documenting code to describe the behavior and conditions that produce the specified results in a program
  • Understanding the ethical and social implications of computer use

According to the College Board’s Computer Science Principles Course Description, the goals of the AP® CS-P course include:

  • Making connections between concepts in computing
  • Applying abstractions in computation and modeling
  • Communicating ideas about technology and computation
  • Designing a program to solve a problem or complete a task
  • Analyzing computational work
  • Working collaboratively to solve problems

In addition to this list of goals, the College Board also offers a topic outlines for the AP® Computer Science courses. This outline, which you should review on the AP® Computer Science A website or the AP® Computer Science Principles website, shows you exactly what you should know for the exam. The main topics are: 

AP® Computer Science A

  • Types and Objects
  • Boolean Expressions
  • Writing Classes
  • Arrays
  • Inheritance
  • Recursion. 

AP® Computer Science Principles

  • Creative Development
  • Data
  • Algorithms and Programming
  • Computing Systems and Networks
  • Impact of Computing

Read through the commentary of the topic outline to get a feel for what the course (and exam) is all about.  A good score on the exam will open doors and prove that you are someone familiar with those topics which is what employers and colleges are looking for!

3. Invest in a good review resource.

Albert has great AP® Computer Science practice tests and one of the largest libraries of fully explained questions for AP® Computer Science A. You can use us for getting hundreds of practice repetitions in, along with detailed explanations to help you learn from your mistakes and better focus on our weaknesses. 

Barron’s seems to be the most widely praised AP® Computer Science study guides since it comes with updated practice tests and questions that are challenging, yet accessible. Another highly recommended review book, by teachers and students alike, is AP® grader Maria Litvin’s Be Prepared for the AP® Computer Science Exam in Java

When it comes to the AP® Computer Science Principles course, Barron’s also has a great AP® Computer Science Principles study guide. Another highly recommended review book, by teachers and students alike, is 5 Steps to a 5 AP® Computer Science Principles by Julie Sway. 

Many students attribute their success on the exam to reading through review books and answering the practice questions that come with them. If you’re looking for more thorough reviews of AP® Computer Science study guides, this site goes over AP® Computer Science A and AP® Computer Science Principles books here. 

4. Take free online courses.

edX offers a two-part course called Preparing for the AP® Computer Science A Exam. You can enroll for free at any time. Take advantage of this resource! In the course, you’ll learn about variables, conditions, Booleans, and more, as well as have access to multiple-choice questions, “mixed-up code that the user drags into the correct order,” and the ability to solve real-world problems. 

edX also offers a XSeries program in CS50’s AP® Computer Science Principles. In the course, you’ll learn concepts like abstraction, algorithms, data structures, encapsulation, resource management, security, software engineering, and web development. You will learn how to develop and present a final programming project to your peers. 

There are also several other free courses that may peak your interest, including Introduction to Programming with Java Part 1: Starting to Code with Java.  UC Berkeley also has a course called The Beauty and Joy of Computing – AP® CS Principles

All of these courses are self-paced which means you can complete them whenever you have extra study time.

5. Watch AP® Computer Science videos.

If you have a hard time staying focused when reading textbooks and review books, give videos a try. They can help break up the monotony of sitting down and reading page after page, and can also help explain things in different ways. 

Educator.com on YouTube has a series of AP® Computer Science videos, covering everything from conditional statements to arrays, and from classes & objects to algorithms. Additionally, if you’re having a hard time understanding a specific concept you read about in your book, take to YouTube and look for a video that explains things in a way you understand. Computer Science can often feel very abstract, so it’s helpful to see audiovisual explanations.

The College Board has a series of AP® Computer Science Principles videos, covering everything from creating the performance task, data abstraction, iteration and selection statements. 

As you watch the videos, think about the algorithms that are used to create the videos. What special effects do you see? What patterns do you notice?

6. Follow social media accounts.

Most people use social media. When it comes to social media like many things computer science related you can be either a consumer or a producer. With a background in computer science, you can be a producer and work at a social media company and write the code that makes social media happen. As such, you can find a huge variety of computer science related social media accounts to follow. 

The accounts that will be helpful to you depend on your level of knowledge and what you want to know more about. You can follow @CompSciFact or  Java programming Twitter accounts, “like” Code.org on Facebook, or follow computer_science_engineers on instagram. When you use social media, think about the computer science under the hood that makes it happen. 

7. Understand how much coding you need to know.

A common question many AP® Computer Science students have is “exactly how much coding do I need to know for the exam?” 

On the exam, you will be using Java, but more specifically the methods from the Java Quick Reference as laid out by the College Board. Make sure you review the College Board’s AP® Computer Science A Java Quick Reference. The Java Quick Reference lists the accessible methods from the Java library that may be included on the exam, starting with the 2019-20 school year. The Java Quick Reference is included in the exam booklet.

The AP® CS Principles exam is not language specific, but you need to understand basic coding concepts. Make sure you review the AP® Computer Science Principles Exam Reference Sheet for a summary of these concepts. You don’t really want to use anything outside of this reference sheet on the exam, although you won’t be docked if you do.

8. Practice!

The only way you can really be prepared for the AP® Computer Science exam is through practice, practice, practice.  You should take full length AP® Computer Science practice tests. But how should you practice? First off, write code! Try to write some well documented code every day. The more practice you have in writing and documenting your code, the better understanding you will have. By documenting your code, you are explaining it to others and thus will be better able to communicate your understanding of computer science concepts. 

Next, practice the multiple choice questions. You can find dozens of sample multiple-choice questions in the AP® Classroom. Be sure to check out AP® Computer Science A and AP® Computer Science Principles on Albert which has hundreds of practice questions organized by topic. 

9. Know what materials are given to you on the exam.

For both the Computer Science A and Computer Science Principles exams you will be given a reference sheet, either the Java Quick Reference or the CS Principles Exam Reference Sheet. You can use this reference at any time during the exam. Remember that this reference is not a substitute for actually knowing and understanding how to implement the classes and interfaces.

Return to the Table of Contents

AP® Computer Science Multiple-Choice Review: 4 Tips

1. Be familiar with the format of the AP® CS multiple-choice section.

Both the Computer Science A and Computer Science Principles exams have a multiple choice section. The length, number and weighting between the two exams is different. The Computer Science A exam has 40 questions and is worth 50% of the exam.  The questions are single-select questions where you select 1 answer from 4 options. The Computer Science Principles exam has 70 questions and is worth 70% of the exam. 

When you think about it, each question is worth about 1% of the exam. With the Computer Science Principles exam, some of the questions are multiple-select multiple-choice: You select 2 answers from 4 options. The Computer Science Principles exam also has the traditional single-select questions. 

2. Know the concepts covered on the exam.

According to the College Board, multiple-choice exam questions can be classified according to certain categories. On the Computer Science A exam, these 10 categories are called units. 

The top units which you should focus your studying on include boolean expressions, conditional statements, iteration, and arrays. If you were to focus on just those topics you would be prepared for over 50% of the material on the exam.  

In the Computer Science Principles exam, these 5 categories are called Big Ideas. The top big ideas are algorithms, programming, data, and the impacts of computing. Focusing on just those ideas is 85% of the material on the exam. 

You should study all of the topics, but your focus should be on the above areas. It’s important that you look over this table to see which questions are tested the most. If you use an online review site Albert, you can select to study questions from one specific category and spend the appropriate amount of time preparing in each category.

Computer Science A Exam UnitWeighting
Unit 1: Primitive Types 2.5–5%
Unit 2: Using Objects 5–7.5%
Unit 3: Boolean Expressions and if Statements 15–17.5%
Unit 4: Iteration 17.5–22.5%
Unit 5: Writing Classes 5–7.5%
Unit 6: Array 10–15%
Unit 7: ArrayList2.5–7.5%
Unit 8: 2D Array 7.5–10%
Unit 9: Inheritance 5–10%
Unit 10: Recursion 5–7.5%
Computer Science Principles Exam Big Ideas Weighting
Big Idea 1: Creative Development 10–13%
Big Idea 2: Data 17–22%
Big Idea 3: Algorithms and Programming 30–35%
Big Idea 4: Computer Systems and Networks 11–15%
Big Idea 5: Impact of Computing21–26%

Note: Total percentage is greater than 100% because some questions can be classified in more than one category.

3. Employ standard multiple-choice test-taking strategies.

The multiple-choice section of the AP® Computer Science exam can be overwhelming. You have limited time and many complex questions to analyze and answer. Sometimes, the best thing to do is take a deep breath and remember some of the essential multiple-choice test taking strategies. You’re probably aware of some of these, but it’s still worth reminding you.

  • Answer EVERY question, even if it’s just a complete guess. You will not be docked for providing a wrong answer. If you had the time to read the question, you have time to make an educated guess. Look for keywords and terms related to the concepts.
  • Even without knowing the right answer, think of the type of answer you are looking for. For example, are you looking for an integer or a string? Are you looking for a Boolean statement or a recursive command?  
  • Read all of the answer choices before making your final decision.
  • Use the process of elimination to narrow down your choices. If you can narrow it down to two choices, you have a 50% chance of choosing the right answer, as opposed to a 25% chance. 
  • Keep track of the time. Make sure you glance at your watch every so often to make sure you’re not running out of time.
  • Remember that a machine scores this section of the exam, so make sure you’re filling in the answer choices fully and darkly.
  • Use the available space for any necessary scratch work. Keep in mind, however, that no credit will be given for anything written in the exam booklet.
  • Feel free to mark up the question. Circle or underline if it helps.
  • Depending on your test-taking style, reading the question before even looking at the possible answer choices may work best for you. Conversely, looking at the answer choices and then reading the question may work best. Find a style that works for you.

4. Know what a typical multiple-choice question looks like.

Practicing by taking multiple practice exams over the course of the year is the best way to become comfortable and confident with this section of the exam. The majority of questions will include a snippet of code, which you will have to analyze in one way or another. For example:

Which line of code above includes a Boolean expression?

A) Line 1  

B) Line 2

C) Line 3

D) Line 4

Sometimes you will be given an output and have to choose the code segment that produces that output. 

For example: A student enters an integer, x, into a program. Which of the following expressions makes sure that x is an integer between 10 and 20 inclusive? Select TWO answers.

Other times, you may be asked to predict what a particular code segment will print out. More complex questions might ask you to change segments of code to perform a specific task, evaluate recursion methods, describe what will happen when a code segment is executed, and analyze code that may have many correct answers. Take a look at the sample Computer Science A or Computer Science Principles multiple-choice questions on Albert to get a feel for the complexity of the questions you might encounter on the exam.

Return to the Table of Contents

AP® Computer Science Principles Performance Task Tips

1. Collaborate with your peers.

The performance task is based on collaborative work that you do in class. Make sure you actually collaborate when you work on the task. This means sharing your ideas with others and combing ideas with your peers to create new ideas that neither of you would have come up with on your own. This post in EdTechReview has suggestions for successful collaboration. 

2. Choose a challenge or problem to solve that interests you. 

The more excited you are about a topic, the more effort you will put into the project. If you are not interested in the topic, then the project will be a chore instead of a capstone project. 

3. Make sure your code includes all of the requirements. 

Your code should include:

  • Instructions for input
  • Collection of data in lists
  • A procedure
  • Sequencing, selection, and iteration
  • Instructions for output

4. Get ready to present your code with a video. 

Don’t wait until the last week to practice using video software to create the video. Try different software (such as Screencastify, Camtasia, iMovie, Adobe Premier Pro, or Soapbox) and choose one that works best for you. 

Practice with the software well before you need to actually create your video. Make sure you write a storyboard for your video well in advance of doing the work in class. Make sure your video adheres to the guidelines:

  • 1 min max
  • No voice narration
  • Demonstrates input, output, and functionality, 
  • Proper size and format

If your initial video does not meet these requirements, that is okay. That is the beauty of video editing. You can easily change the format of your video and reduce the size of your file by changing the resolution. Captions can be used instead of narration. By cutting out sections it is easy to get down to 1 minute. But by practicing with video software early, you will not have to learn these tricks at the last minute. 

5. Practice writing brief written responses. 

It is much harder to be thorough and concise than to write a lot. There are three written responses and the maximum you can write is 750 words. Assume your reader is educated in computer science and you do not need to explain Computer Science to them. You need to explain and communicate your work, that your program accomplishes the tasks, and that you understand it. 

6. Understand how the Performance Task is scored.

Review the scoring guidelines which are on the College Board website. Consider the first point in the rubric for Program Purpose and Function

A common mistake is not taking advantage of the video medium and showing the program actually running. Screenshots are not good enough, you need to include the visual results of the code. 

7. Look at older student portfolios.

Look at sample students portfolios and how they were scored. Keep in mind that in the older Computer Science Principles exam there were two sections of the performance task, a Create and a Explore. Starting in 2021 there will only be one section, the Create Performance task.  Look at the content of the videos and the written responses. The older tests (2018 and 2017) have Commentary on the Create sections. If you look at how the exam is graded, you will see that the portfolios either earn the point, or they don’t. The first few samples in 2018 have perfect scores, but after that you will see variation. One common error is whether or not the responses can clearly identify two algorithms used in the code and how they relate to the overall function of the code. 

Return to the Table of Contents

AP® Computer Science A Free-Response Tips

1. Avoid the twelve most common errors.

In CS, you will make mistakes. It comes with the territory. However, as long as you are aware of the most common mistakes and errors, you can hopefully avoid them on the free-response section of the exam. The most common errors include:

  • Being off by one in loops
  • Not initializing a variable
  • Failure to return a required value
  • Using the wrong identifier
  • Not returning a statement in a non-void method
  • Modifying a constant
  • Using local variables but not declaring them
  • Missing { }, (), or semicolons
  • Including extraneous code that causes side effects
  • Confusing = with ==
  • Confusing [] with ()
  • Assigning values incorrectly (putting x + 2 = y, instead of y = x + 2)

2. Write legibly, clearly, and with good programming style.

It’s always important to remember that humans will be grading the free-response section of the AP® Computer Science A exam. This means you should aim for clarity in your programming responses. You want your responses to be as easy to grade as possible. Keep in mind the following when writing your programming responses:

  • Assign meaningful variable names
  • Write neatly and legibly
  • Always indent properly (this is a big one because if you accidentally miss a curly brace or semicolon, proper indentation will save you)
  • Position curly braces clearly
  • Keep it organized
  • Use white space liberally
  • Do not write too small or too large
  • Put each statement on a separate line

This 2019 response from a real AP® Computer Science test-taker shows what a neat, legible response with good programming style looks like. This response actually earned a score of 9!

3. Do not use specific numbers, strings, or dimensions of arrays in your code.

You want to make your program work with any potential number, string, or dimension, not just the one given to you as an example in the question. This is a common mistake that many AP® CS students make. 

For example, if a question is about a two-dimensional array and it shows you an image of a 3 by 4 array, do not use the numbers 3 and 4 in your code. Instead, depending on what the question is asking, you’d want to make your code work with an array of any size. Remember, do not use specific numbers!

4. Attempt every part of the question.

Most AP® Computer Science free-response questions will include multiple parts (part a, part b, part c, etc.). It may surprise you that part (a) is usually harder than parts (b) and (c). The problem with this is that many test-takers get discouraged when they don’t know how to answer part (a), so they don’t even attempt the other parts. Don’t do this! 

Each part is graded independently from the previous parts. This means that if you leave part (a) blank or provide an incorrect answer, you could still get full or partial credit for the other parts! However, do not re-implement code from earlier parts in later parts, even if that particular code is 100% correct. This is a waste of time and you could potentially lose points.

5. Make sure you’ve actually answered the question.

Sounds like a no-brainer, right? Not so much. Some students get so caught up in their answer that they forget to make sure they’re actually addressing the problem or answering the question. To avoid this, underline, circle, or star important details when you first read the problem. Reread the question. Look for phrases like “You will receive no credit if…”. 

When you’ve finished writing your code, look at the problem again. Look at the information you underlined or circled. Did you actually answer the question?

6. Always write down some code in your answer.

You will be given no credit for simply describing what you would do if you had the time to write out the code (this is not an English exam). You could receive some credit, however, for attempting some aspect of the code. You may not know how to write the full code to address the problem, but always write at least some code for the parts you do. Partial credit may be given for having the correct loop bounds, attempting to sum values in an array, etc.

7. Remember that elegance of code does not matter.

For you advanced programmers out there, elegant coding does not count on the AP® CS exam. Don’t try and show off, no matter how much you want to. Stick to what you know. You could potentially waste time trying to write really simple, efficient code, or even trick yourself in the process. A brute-force approach is best on the exam. Comments are not a substitute for writing clear, simple, and correct code. If you need to explain your code with comments, then it is too complicated. 

8. Stay within the AP® Java Quick Reference.

The subset if given to you for a reason. Even if you went outside the subset in your AP® CS class or if you’re a Java pro, don’t get fancy on the exam. Keep it simple and use the AP® Java Quick Reference

In particular, just use the classes on the AP® Java Quick Reference (such as Strings, Integers, Double, Math, ArrayLists, or Objects). There are many other classes such as Data or Sort, but you do not need them. 

9. Follow Java naming conventions.

A simple tip, but make sure you’re naming your methods, variables, and parameters correctly. Start names with a lowercase letter and keep names meaningful but not too verbose. Use your best judgment. For example, “count” would be better than “a,” but “ k” would be better than “loopControlVariable.” Also, make sure you look at the question carefully before naming things in your code. Sometimes the question will contain names that you should use in your code.

10. Don’t waste time including comments.

Comments are completely disregarded by AP® readers. You will therefore receive no credit for them. Your code should never be so confusing that you have to include comments to show the AP® reader what you’re doing. The only time you should include comments is if it helps you organize your thoughts and stay on track. Since you’ll be under a time crunch on the AP® Computer Science FRQ, don’t waste your valuable time on comments.

11. Code according to the specifications and preconditions and postconditions.

Don’t code anything outside of the specifications! You don’t want to include any “bells and whistles,” since you are likely to lose points if you do. It’s important to note that you should never add System.out.print unless you are asked to. Additionally, don’t include any unnecessary checks to your code. 

For a question you might see on your exam, take a look at this question taken from the 2019 AP® Computer Science Exam. It outlines the specifications, preconditions, and postconditions of a particular problem:

In this question, the LightBoard class models a two-dimensional display of lights, where each light is either on or off, as represented by a Boolean value. In the question, you would implement a constructor to initialize the display and a method to evaluate a light.

Return to the Table of Contents

Tips by AP® Computer Science Teachers and Students

Tips for Both Computer Science A and Computer Science Principles exams

1. Don’t spend time memorizing specific code. 

Having a good conceptual understanding of algorithms is more important than memorizing code. No questions on the AP® CS exam will ask you to regurgitate specific code (for example, searches and sorts). It’s useful to be able to recognize binary searches, for example, but don’t spend time memorizing code. Thanks to Ms. C. from Lancaster Country Day School for the tip!

2. Use CodingBat for programming practice.

This website created by a Stanford Computer Science lecturer offers live coding problems to build skills in Java or Python. You can get immediate feedback on a huge variety of coding problems, as well as see solutions and watch videos explaining those solutions. CodingBat is really fun, too, which makes it a useful study tool. Thanks to Mr. M. at Pacific Collegiate School for the tip!

3. Don’t just read the textbook.

The exam won’t have questions based on vocabulary gleaned from a textbook (like “Polymorphism is…”). Instead there will be questions like “”According to the code above, if the value of x is 3, then what value is returned?” You can’t just learn this from reading a textbook. It’s crucial that you do programming exercises and learn to trace code by actually learning to code!

4. Read other people’s code.

Looking at other people’s code gives you an insight into someone else’s train of thought. It can help open your mind to other possible solutions to a problem and other methods and conventions that you may not have thought about before.

5. Review basic searches and sorts.

You should be able to identify linear and binary searches, as well as bubble, insertion, selection, quick, and merge sorts. You don’t have to know how to program them, but you should know their basic characteristics.

Specific Java Tips for the AP® Computer Science A exam

1. Be aware of the three types of errors.

There are three types of errors in student responses: no-deduction errors, ½-point deduction errors, and 1-point deduction errors. Thanks to Mr. H. at Granger High School for the tip!

  • No-deduction errors are the honest slips of the mind that usually happen as a result of the stresses of the time crunch. Errors like missing parentheses, using = instead of ==, etc. will usually lead to no point deductions. Still, it’s best to avoid these types of mistakes to make it easier on the AP® reader.
  • ½-point deductions are for minor errors. If you misspell identifiers, confuse brackets with parentheses, or forget to declare local variables, etc., you could lose a ½ point. To avoid these types of mistakes, practice writing code by hand regularly.
  • 1-point deductions are for major errors. These deductions are often as a result of not understanding the object-oriented paradigm or not understanding the question (extraneous code, misuse of private data, destruction of data structures, etc.)

2. Avoid the temptation to show off.

For example, don’t use recursion to do something that can easily be done iteratively. The AP® readers aren’t looking for fanciness. In fact, if you do something offbeat or obscure, the AP® readers can actually misinterpret your answer, leading to lost points. Trying to be clever can also lead to errors and confusion. For these reasons, keep your code straightforward and conventional. Thanks to Mr. D. at Allegheny College for the tip!

3. Follow proper naming conventions.

Do not use single-letter variable names except for looping variables. Choose variable names that reflect the variable’s purpose or scope of use. Remember that you’re handwriting the code, so avoid using certain letters and numbers that can get confused (for example, o and 0). Thanks to Mr. H. at Granger High School for the tip!

4. Know the types of questions you can expect to see.

About 30 of the 40 multiple-choice questions will most likely involve tracing code. This can be time-consuming so make sure you’re allowing yourself enough time to get to every question. The other multiple-choice questions might involve Boolean algebra (De Morgan’s Law, true/false logic), conversion of binary, octal, or hexadecimal to a decimal number, and double-nested loop analysis. Make sure that you also know how to work with Integer and Double Thanks to Mr. M. from Wyomissing Area High School for the tip!

5. The only way to get good at writing Java is to practice writing Java.

I had no programming experience when I started AP® CS, and now I’ve fallen in love with coding. That being said, you need to practice! Set projects for yourself. Intentionally write errors into your program to see how the compiler responds. Expand programming assignments to see what you can accomplish.

Return to the Table of Contents

Wrapping Things Up: The Ultimate List of AP® Computer Science Tips

AP® Computer Science may seem impossible at first. There are times when you might just want to give up completely. But don’t get too overwhelmed! Computer science is a subject that takes time and practice. If you’ve been programming since you were in elementary school, or if you’ve never even seen a piece of code in your entire life, it’s possible to get a great score on the AP® Computer Science exam. Just focus on these three things: 

  1. Write some code to solve a problem every day
  2. Read and interpret some new code every day
  3. Practice some multiple choice questions from AP® Computer Science practice tests every day, but choose a different category each week.

Having a AP® Computer Science study plan, knowing what to expect on the AP® Computer Science exam, and practice, practice, practice will give you the best chance at getting a 4 or 5. Good luck and good luck preparing for the AP® Computer Science exam!

Read More

Author: admin

Leave a Reply

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