0% found this document useful (0 votes)
3 views80 pages

Sorting and Searching 5m

This document provides an overview of arrays and strings in C programming, detailing their definitions, properties, and how to declare, initialize, and manipulate them. It includes examples of reading and writing arrays, initializing them, and performing operations such as summing elements and conducting searches. Additionally, it covers the concept of linear search and provides sample code for various array-related tasks.

Uploaded by

jiyiw88106
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views80 pages

Sorting and Searching 5m

This document provides an overview of arrays and strings in C programming, detailing their definitions, properties, and how to declare, initialize, and manipulate them. It includes examples of reading and writing arrays, initializing them, and performing operations such as summing elements and conducting searches. Additionally, it covers the concept of linear search and provides sample code for various array-related tasks.

Uploaded by

jiyiw88106
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 80

MODULE -3

Arrays: Introduction, One-dimensional arrays, Declaring and


Initializing arrays, Multidimensional arrays.
Strings: Introduction to Strings, String operations with and without
using String handling functions, Array of strings

Dayananda Sagar Academy of Technology and Management


Lets consider the program to read marks of 3 students
and print them.
#include<stdio.h>
int main() These program work fine . However , if we
want read marks of say 20 or more
{ students, then we have declare 20 or more
int m1,m2,m3; variables, process them and print.

printf(“Enter marks of 3 students\n”);


scanf(“%d%d%d”,&m1,&m2,&m3);

printf(“%d%d%d”,m1,m2,m3);
}

Dayananda Sagar Academy of Technology and Management


In general, the main disadvantage of using above simple program are:

• Difficult to declare more variables.


• Difficult to write program to read data into more number of variables
and difficult to write the data stored in more variables.
• Very difficult to process large amount of data.
• Length of program increases as the number of variables increases.
• Consume too much time to type , modify and correct.

Dayananda Sagar Academy of Technology and Management


ARRAY
• An array is a special and very powerful data type in C.
• An array is defined as an ordered set of similar data items. All the data
items of an array are stored in consecutive memory locations in RAM.
The elements of an array are of same data type and each item can be
accessed using the same name.

Ex 1: Set of integers, set of characters , set of students, set of pens.


Ex 2: Marks of all students in a class is an array of marks.
Ex 3: students name in class ia an array of students name.

Dayananda Sagar Academy of Technology and Management


The pictorial representation of array of integers, array of characters,
array of floating point is as shown below:

10 B[0] 5.5 C[0] ‘A’


A[0]
20 B[1] 6.5 C[1] ‘B’
A[1]
30 B[2] 7.5 C[2] ‘C’
A[2]
40 B[3] 8.5 C[3] ‘D’
A[3]
50 9.5 ‘E’
A[4] B[4] C[4]

Array of 5 integers Array of 5 charaters


Array of 5 floats

Dayananda Sagar Academy of Technology and Management


Classification of Arrays

Single dimension array

Classification
of Arrays
Two dimension array

Dayananda Sagar Academy of Technology and Management


Single dimension array[One dimension array]
[1D array]
• A single dimension array(also called One dimension array) is a linear list consisting of related data items
of same data types.
• All the data items of an array are stored in consecutive memory locations in RAM.
• For example a single dimension array consisting of 5 integers is shown below:

10 15 20 25 30

A[0] A[1] A[2] A[3] A[4]

• Since array is identical by common name any element can be accessed by specifying the subscription (or
an index). For example , in above array:
• 0th element 10 can be accessed by specifying A[0]
• 1st element 15 can be accessed by specifying A[1]
• 2nd element 20 can be accessed by specifying A[2]
• 3rd element 25 can be accessed by specifying A[3]
• 4th element 30 can be accessed by specifying A[4]
Dayananda Sagar Academy of Technology and Management
Basic properties of array:
• The array elements should be of the same data type.
• The data items are stored contiguously in memory.
• The subscript of first item is always zero.
• Each data item is accessed using the name of the array, but with
different subscript.
• Index of array is always an integer.
• Ex 1: a[1.5] // Error index has to be integer
• Ex 2: a[1] // OK
• Ex 3: a[‘5’] //OK index is an integer
// ‘5’ has an ASCII value which is integer.

Dayananda Sagar Academy of Technology and Management


Declaration of one dimension array
• We know that all the variables are declared before they are used in the program. Similarly, an array must be declared
before it is used.
• The declaration and definition informs the complies about the:
⮚ Type of each element of array
⮚ Name of the array
⮚ Number of elements(i.e size of array)

• The size used during declaration of the array informs the compiler to allocate and reserve the specified
memory locations.

Syntax: - data_type array_name[int_expression]; // semicolon is must at the end

Expression must be evaluated to integer

Name of the array

Data type such as int, float ,char , double

Dayananda Sagar Academy of Technology and Management


• Ex 1: int a[5]; // a is array of 5 integers

10 memory locations reserved


a[0] a[1] a[2] a[3] a[4]

Since sizeof (int) is 2 bytes, 2*5=10 bytes

• Ex 2: float avg[5];

20 memory locations reserved


a[0] a[1] a[2] a[3] a[4]

Since sizeof (float) is 4 bytes, 4*5=20 bytes

• Ex 3: char name[5];

5 memory locations reserved


name[0] name[1] name[2] name[3] name[4]
Since sizeof (char) is 1 bytes, 1*5=5 bytes
Dayananda Sagar Academy of Technology and Management
Storing values in Array:
• Initialization
• Input from keyboard

Dayananda Sagar Academy of Technology and Management


Initialization of single dimension Arrays
• We can initialize the elements of arrays in the same way as the ordinary
variables when they are declared. The general form of initialization of arrays
is
type array-name[expression/size]= {list of values};

• Where,
• type can be int, float, char ,double
• array_name is name of the array
• expression/size should be evaluated to integer.
• list of values are v1,v2,….vn should be enclosed with in ’{‘ and ‘}’ and separated by
commas.

Dayananda Sagar Academy of Technology and Management


The various ways to initializing array as shown below:
• Initializing all specified memory locations.
• Partial array initialization
• Initialization without size.
• String initialization.

Dayananda Sagar Academy of Technology and Management


Initializing all specified memory locations
Arrays can be initialized at the time of declaration when their initial values are known in advance. Array
elements can be initialized with data items of type int, char etc.

Ex:- int a[5]={10,15,20,25,30};

During compilation, 5 contiguous memory locations are reserved by the compiler for the variable a and all
these locations are initialized as shown in figure.

10 15 20 25 30

a[0] a[1] a[2] a[3]


a[4]
Ex: -
int a[3]={9,2,4,5,6}; //error: no. of initial vales are more than the size of
array.

Dayananda Sagar Academy of Technology and Management


Partial array initialization
• Partial array initialization is possible in c language. If the number of values to be initialized is less
than the size of the array, then the elements will be initialized to zero automatically.
Ex:-
int a[5]={10,15};
Even though compiler allocates 5 memory locations, using this declaration statement; the compiler
initializes first two locations with 10 and 15, the next set of memory locations are automatically
initialized to 0's by compiler as shown in figure

10 15 0 0 0

a[0] a[1] a[2] a[3]


a[4]

Dayananda Sagar Academy of Technology and Management


Initialization without size.
Consider the declaration along with the initialization.
Ex:-
int a[ ]={10,15,20,25};
In this declaration, even though we have not specified exact number of
elements to be used in array a, the array size will be set of the total
number of initial values specified. So, the array size will be set to 5
automatically. The array a is initialized as shown in figure.
10 15 20 25

a[0] a[1] a[2] a[3]

Dayananda Sagar Academy of Technology and Management


String initialization
Array initialization with a string: -Consider the declaration with string initialization.
Ex:-
char b[]="COMPUTER";
The array b is initialized as shown in figure.

C O M P U T E R /0
b[0] b[1] b[2] b[3] b[4] b[5] b[6] b[7] b[8]

• Even though the string "COMPUTER" contains 8 characters, because it is a string, it always ends with null
character. So, the array size is 9 bytes (i.e., string length 1 byte for null character).

• Ex:-
char b[9]="COMPUTER"; // correct
char b[8]="COMPUTER"; // wrong
Dayananda Sagar Academy of Technology and Management
Reading / Writing single dimension arrays
• We can easily read, write or process the array items using appropriate
programming constructs such as for-loop, while or do-while.
• Consider the declaration :
int a[5];
• Here, memory for 5 integer is reserved and each items in array can be
accessed by index and name.
Using a[0] through a[4] we can access 5 integers

In general, Using a[0] through a[n-1] we can access n data items

Dayananda Sagar Academy of Technology and Management


• Once we know how to access, next how to store to memory?
This is achieved by using scanf() to read data from keyboard.
scanf(“%d”, &a[0]);
scanf(“%d”, &a[1]);
scanf(“%d”, &a[2]);
…………………………….
……………………………
scanf(“%d”, &a[n-1]);

In general, scanf(“%d”, &a[i]); where i=0,1,2,3,……n-1

Dayananda Sagar Academy of Technology and Management


for(i=0;i<=n-1;i++) for(i=0;i<n; i++)
{ {
scanf(“%d”, &a[i]); or scanf(“%d”, &a[i]);
} }
Using operator <= Using operator <

Similarly to display n data items stored in the array, replace scanf() by printf()
statement as shown below:
for(i=0;i<n;i++)
{
printf(“%d”, a[i]);
}
Dayananda Sagar Academy of Technology and Management
Program to read n items from keyboard and display n elements on the monitor.

int main()
{
int i, a[100],n;
printf(“Enter the size of an array “);
scanf(“%d”, &n); // read array size
printf(“Enter %d elements\n”, n);
for(i=0;i<n; i++)
scanf(“%d”, &a[i] ); // to read array elements
printf(“Array elements are \n”);
for(i=0;i<n; i++)
printf(“%d”, a[i]); // to print array elements
}
Dayananda Sagar Academy of Technology and Management
Write a c-program to find sum of N-array
elements

Dayananda Sagar Academy of Technology and Management


#include<stdio.h>
main()
{
int a[100],i,n,sum=0;
printf("Enter array size\n");
scanf("%d",&n);
printf("Enter %d elements of array\n",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
sum=sum+a[i];
}
printf("sum of %d array elements is=%d",n,sum);
} Dayananda Sagar Academy of Technology and Management
To create a program in C to add, element-wise,
two one-dimensional arrays A and B of N integer
elements and to store the result in another one-
dimensional array C of N integer elements

Dayananda Sagar Academy of Technology and Management


#include<stdio.h>
main()
{
int a[100],b[100],c[100],i,n;

printf("Enter the size of array A\n");


scanf("%d",&n);

printf("enter %d elements\n",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("enter %d elements of Array B\n",n);
for(i=0;i<n;i++)
scanf("%d",&b[i]);
for(i=0;i<n;i++)
c[i]=a[i]+b[i];
printf("addition of array A & B is \n");
for(i=0;i<n;i++)
printf("%d + %d=%d\n", a[i],b[i],c[i]);
}
Dayananda Sagar Academy of Technology and Management
Output:
Enter the size of array A
3
enter 3 elements
1
2
3
enter 3 elements of Array B
3
4
5
addition of array A & B is
1 + 3=4
2 + 4=6
3 + 5=8
Dayananda Sagar Academy of Technology and Management
Write a C program to generate and print first
– N Fibonacci series using array

Dayananda Sagar Academy of Technology and Management


#include<stdio.h>
main()
{
int n, i, fib[100];
printf("\n enter n value\n");
scanf("%d", &n);
fib[0]=0;
fib[1]=1;
for(i=2; i<n ;i++)
{
fib[i]=fib[i-1]+fib[i-2];
}
printf("First %d Fibnonacci numbers are\n",n);
for(i=0;i<n;i++)
printf("%d\n",fib[i]);
}
Dayananda Sagar Academy of Technology and Management
Output:
enter n value
5
First 5 Fibnonacci numbers are
0
1
1
2
3

Dayananda Sagar Academy of Technology and Management


SEARCHING TECHNIQUE
The definition of a search is the process of looking for
something.
A search algorithm is an algorithm for finding an item with
specified properties among a collection of items that coded
into a computer program.

•Linear Search
•Binary Search
Dayananda Sagar Academy of Technology and Management
Linear Search (LS)
Linear Search involves checking all the
elements of the array (or any other structure)
one by one and in sequence until the desired
result is found.

Dayananda Sagar Academy of Technology and Management


Linear Search
Write a c-program to input N integer numbers into a
single dimension array. To conduct a linear search for
given key element.

Dayananda Sagar Academy of Technology and Management


for(i=0;i<n;i++)
#include<stdio.h>
{
int main() if(key==a[i])
{ {
found=1;
int a[100],n, i, key, found=0;
break;
printf("Enter the number of elements\n"); }
scanf("%d",&n); }
if(found==1)
printf("Enter the %d elements of array\n", n); {
for(i=0;i<n; i++) printf("Item found in position %d\n",i+1);
scanf("%d", &a[i]);
}
else
printf("Enter the key to search\n"); {
scanf("%d", &key); printf("Item not found\n");
}
}

Dayananda Sagar Academy of Technology and Management


EXAMPLE

Every item is checked but no match is found


till the end of the data collection
EXAMPLE

Found a match at
index 2
Enter the number of elements

5
Enter the 5 elements of array
34
2
76
56
90
Enter the key to search
56
Item found in position 4

Dayananda Sagar Academy of Technology and Management


Adv. & Disadv. of Linear search
• Advantages
– Easiest to understand and implement
– No sorting required
– Suitable for small list sizes
– Works fine for small number of elements

• Disadvantages
– Time inefficient as compared to other
algorithms
– Not suitable for large-sized lists
– Search time increases with number of
elements
Binary Search (BS)

• Binary Search is a Divide and Conquer algorithm

• Binary search algorithm finds the position of a target


value within a sorted array

• A more efficient approach than Linear Search because


Binary Search basically reduces the search space to
half at each step
Binary Search
• The algorithm begins by comparing the target value to the value of
the middle element of the sorted array
• If they are equal the middle position is returned and the search is
finished
• If the target value is less than the middle element's value, then the
search continues on the lower half of the array;
• If the target value is greater than the middle element’s value,
then the search continues on the upper half of the array
• This process continues, eliminating half of the elements until the value is
found
Graphical Illustration of BS

17-01-2020 40
Program 6

Introduce 1D Array manipulation and


implement Binary search

Dayananda Sagar Academy of Technology and Management


#include<stdio.h> low=0;
int main()
high=n-1;
while(low<=high) if(found ==1)
{ {
int i, n, a[10],mid, low, high, key, found=0; mid=(low +high )/2; printf(“Item found in position :
if(key==a[mid]) %d”,mid+1);
printf("\n Enter the number of elements:\n");
{ else
scanf("%d", &n); found=1;
break; printf("\n Item not found\n");
printf("Enter the array element in the ascending order\n"); }
else if(key>a[mid]) }
for(i=0;i<n; i++)
{
low=mid+1;
scanf("%d", &a[i]); else
high=mid-
} 1;
printf("\n Enter the key element to be searched\n");
}
scanf("%d", &key);

Dayananda Sagar Academy of Technology and Management


#include<stdio.h>
int main()
{ n=5
int i, n, a[10],mid, low, high, key, found=0;
a[0] a[1] a[2] a[3 a[4]
printf("\n Enter the number of elements:\n");
10 20 30 40 50
scanf("%d", &n);

printf("Enter the array element in the ascending order\n");


for(i=0;i<n; i++)
{ key= 50
scanf("%d", &a[i]);
}

printf("\n Enter the key element to be searched\n");


scanf("%d", &key); Dayananda Sagar Academy of Technology and Management
50
low=0;
a[0] a[1] a[2] a[3] a[4]
high=n-1; n=5
key= 50 10 20 30 40 50
while(low<=high) l=0
h=5-1=4
{ Low mid high
mid=(low +high )/2; m=(l+h)/2 a[mid]=30

=(0+2)/2=2 50
a[0] a[1] a[2] a[3] a[4]
if(key==a[mid])
{ L=2+1=3 10 20 30 40 50
H=4
found=1;
m=(l+h)/2
break;
Low mid high
} =(3+4)/2=3
a[mid]=40
else if(key>a[mid]) 50
L=3+1=4 a[0] a[1] a[2] a[3] a[4]
low=mid+1; H=4
10 20 30 40 50
M=(4+4)/2=4
else
high=mid-1;
} Low high
mid
a[mid]=50
Dayananda Sagar Academy of Technology and Management
if(found ==1)
printf(“Item found in position : %d”,mid+1);
else
printf("\n Item not found\n");
}

Dayananda Sagar Academy of Technology and Management


OUTPUT:
RUN 1:
Enter the number of elements: RUN 2:
5
Enter the number of elements:
5
Enter the array element in the ascending
order Enter the array element in the ascending order
10
10
20
20
30
30
40
40 50
50 Enter the key element to be searched
Enter the key element to be searched 70
30 Item not found
Item found in position: 3

Dayananda Sagar Academy of Technology and Management


Example
Continued..
Sorting and Its
Types

Dayananda Sagar Academy of Technology and Management


SORTING
🞆 Sorting refers to operations of arranging a set
of data in a given order.

30 10 60 20 50 40
Unsorted List

10 20 30 40 50 60
Sorted List
METHODS OF SORTING:
🞆 Bubble Sort
🞆 Selection Sort
BUBBLE SORT
ALGORITHM
🞆Bubble Sort:
Algorithm of bubble sort includes two steps
repeated until the list is sorted.
⮚ Compare adjacent elements, if the
element on right side is smaller then
swap their positions.
⮚ Compare first element, second element
and so on on completion of Pass 1 the
largest element is at last position.
50 10 30 20 40

Pass 1: Number Of Passes =


1=4
Max – 1 = 5 –

50 10 30 20 40 0,1
10 50 30 20 40 1,2

10 30 50 20 40 2,3

10 30 20 50 40
3,4

10 30 20 40 50
Pass 2:
10 30 20 40 50 0,1

10 30 20 40 50
1,2

10 20 30 40 50
2,3

10 20 30 40 50
Pass 3:

10 20 30 40 50 0,1

10 20 30 40 50
1,2

10 20 30 40 50
Pass 4:

10 20 30 40 50 0,1

10 20 30 40 50

10 20 30 40 50 Sorted list
PROGRAM 11
Develop a program to sort the
given set of N numbers using
Bubble sort.

Dayananda Sagar Academy of Technology and Management


#include<stdio.h> for(i=0;i<n-1;i++)
int main() {
{ for(j=0;j<n-i-1;j++)
{
int a[100],n, i, j, temp;
if(a[j]>a[j+1])
{
printf("Enter the number of elements\n"); temp=a[j];
scanf("%d",&n); a[j]=a[j+1];
a[j+1]=temp;
}
printf("Enter the %d elements of array\n", n); }
for(i=0;i<n;i++)
scanf("%d",&a[i]); }

printf("\nThe sorted array is\n");


printf("The Input array is\n");
for(i=0;i<n;i++)
for(i=0;i<n;i++) printf("%d\t",a[i]);
{
printf("%d\t",a[i]); }
}
Dayananda Sagar Academy of Technology and Management
for(i=0;i<n-1;i++)
{
a[0] a[1] a[2]
for(j=0;j<n-i-1;j++) a[3]
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}

Dayananda Sagar Academy of Technology and Management


Output:

Enter the number of elements


5
Enter the 5 elements of array
45
2
88
1
34
The Input array is
45 2 88 1 34
The sorted array is
1 2 34 45 88

Dayananda Sagar Academy of Technology and Management


SELECTION SORT
ALGORITHM
🞆 Selection Sort:
Here in selection sort the algorithm depends on the
zeroth element majorly.

⮚ The Zeroth element is compared with the first


element and if the element at right is found smaller
then their positions are swapped or exchanged.

⮚ The same procedure is carried with all elements of


the list resulting into a fully sorted list.
23 15 29 11 1

Pass 1: Number Of Passes = Max – 1 = 5 –


1=4

23 15 29 11 1
0,1

15 23 29 11 1
0,2

15 23 29 11 1 0,3

11 23 29 15 1
0,4
1 23 29 15 11
Pass 2:

1 23 29 15 11
1,2

1 23 29 15 11
1,3

1 15 29 23 11
1,4

1 11 29 23 15
Pass 3:

1 11 29 23 15
2,3

1 11 23 29 15
2,4

1 11 15 29 23
Pass 4:

1 11 15 29 23
3,4

1 11 15 23 29

1 11 15 23 29 Sorted List
/* program to sort the array
elements using selection sort */

Dayananda Sagar Academy of Technology and Management


#inclde<stdio.h> for(i=0;i<n-1;i++)
{ printf("\n\nThe sorted array is \n");
#include<math.h> pos=i; for(i=0;i<n;i++)
int main() for(j=i+1;j<n;j++)
printf("%d\n ",a[i]);
{
{ if(a[j]<a[pos]) }
int i,n,j,temp,a[100],pos; pos=j;
}
printf("Enter the number of elements \n"); temp=a[pos];
scanf("%d",&n); a[pos]=a[i];
a[i]=temp;
printf("Enter the elements of array \n"); }
for(i=0;i<n;i++)
scanf("%d",&a[i]);

Dayananda Sagar Academy of Technology and Management


for(i=0;i<n-1;i++)
a[0] a[1]
{ a[2]
pos=i;
for(j=i+1;j<n;j++)
{
if(a[j]<a[pos])
pos=j;
}
temp=a[pos];
a[pos]=a[i];
a[i]=temp;
}
Dayananda Sagar Academy of Technology and Management
printf("\n\nThe sorted array is \n");
for(i=0;i<n;i++)
printf("%d\n ",a[i]);
}

Dayananda Sagar Academy of Technology and Management


Output:
Enter the number of elements
5
Enter the elements of array
12
56
87
2
41

The sorted array is


2 12 41 56 87
Dayananda Sagar Academy of Technology and Management
L4. Write a C program to evaluate the given polynomial-

f(x)=anxn+an-ix n-1 +an-2xn-2+…a1x1 +a0x0

For a given value of x and co- efficients using Horner’s


method.

Dayananda Sagar Academy of Technology and Management


Example
• Number of coefficients n=5
• For n=5 degree of the polynomial will be 5
• So we have to 6(n+1) coefficients value in to 1-D array
• For example
9 3 6 7 3 4
A[0] A[1] A[2] A[3] A[4] A[5]
• The polynomial will be
f(x)=4x5+3x4+7x3+6x2+3x1+9x0
take x=2.

Dayananda Sagar Academy of Technology and Management


HORNERS METHOD
f(x)=4x5+3x4+7x3+6x2+3x1+9x0
=(4x+3)x4 + 7x3+6x2+3x1+9x0
= ((4x+3)x+7)x3 + 6x2+3x1+9x0
= (((4x+3)x+7)x+6)x2+3x1+9x0
=((((4x+3)x+7)x+6)x+3)x+9

Dayananda Sagar Academy of Technology and Management


=((((4x+3)x+7)x+6)x+3)x+9

(sum+3)x

(sum+7)x

(sum+6)x

(sum+3)x

Sum+9
Dayananda Sagar Academy of Technology and Management
Dayananda Sagar Academy of Technology and Management
# include<stdio.h>
# include<conio.h>
void main( )
{
int i, n, sum, x, a[20];
clrscr( );
printf("Enter the number :of coefficients\n") ;
scanf("%d", &n) ;
printf("Enter the Coefficients\n") ;
for (i = 0; i<=n; i ++)
{
scanf ("%d", &a[i]);
}
Dayananda Sagar Academy of Technology and Management
printf("Enter the value of x/n");
scanf("%d", &x);
sum=a[n]*x;
for (i=n-1;i>0;i--)
{
sum=(sum+a[i])*x;
}
sum=sum+a[0];
printf("The result=%d",sum);
getch ( ) ;
}

Dayananda Sagar Academy of Technology and Management


OUTPUT:
Enter the number of coefficients
4
Enter 5 coefficients
5
4
3
2
1
Enter the value of x
2
The Sum= 57.000000

Dayananda Sagar Academy of Technology and Management

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy