The Free Meteor Association (FMA) has got a problem: as meteors are moving, the Universal Cosmic Descriptive Humorous Program (UCDHP) needs to add a special module that would analyze this movement. 

UCDHP stores some secret information about meteors as an n × m table with integers in its cells. The order of meteors in the Universe is changing. That's why the main UCDHP module receives the following queries:

  * The query to swap two table rows; 
  * The query to swap two table columns; 
  * The query to obtain a secret number in a particular table cell. 



As the main UCDHP module is critical, writing the functional of working with the table has been commissioned to you.

Input

The first line contains three space-separated integers n, m and k (1 ≤ n, m ≤ 1000, 1 ≤ k ≤ 500000) — the number of table columns and rows and the number of queries, correspondingly.

Next n lines contain m space-separated numbers each — the initial state of the table. Each number p in the table is an integer and satisfies the inequality 0 ≤ p ≤ 106.

Next k lines contain queries in the format "si xi yi", where si is one of the characters "с", "r" or "g", and xi, yi are two integers.

  * If si = "c", then the current query is the query to swap columns with indexes xi and yi (1 ≤ x, y ≤ m, x ≠ y); 
  * If si = "r", then the current query is the query to swap rows with indexes xi and yi (1 ≤ x, y ≤ n, x ≠ y); 
  * If si = "g", then the current query is the query to obtain the number that located in the xi-th row and in the yi-th column (1 ≤ x ≤ n, 1 ≤ y ≤ m). 



The table rows are considered to be indexed from top to bottom from 1 to n, and the table columns — from left to right from 1 to m.

Output

For each query to obtain a number (si = "g") print the required number. Print the answers to the queries in the order of the queries in the input.

Examples

Input

3 3 5
1 2 3
4 5 6
7 8 9
g 3 2
r 3 2
c 2 3
g 2 2
g 3 2


Output

8
9
6


Input

2 3 3
1 2 4
3 1 5
c 2 1
r 1 2
g 1 3


Output

5

Note

Let's see how the table changes in the second test case.

After the first operation is fulfilled, the table looks like that:

2 1 4

1 3 5

After the second operation is fulfilled, the table looks like that:

1 3 5

2 1 4

So the answer to the third query (the number located in the first row and in the third column) will be 5.
import java.util.*;
import java.io.*;
/**
 * @author Alvex - GoldenReam1503@gmail.com
 * Time: 2:49:06 PM
 * Date: Nov 13, 2015
 */
public class _222B_Cosmic_Tables
{
    private static class Input
    {
        private InputStream stream;
        private byte Buffer[]=new byte[1024];
        private int curChar;
        private int numberChars;
        private SpaceCharFilter filter;
        public interface SpaceCharFilter 
        {
            public boolean isSpaceChar(int ch);
        }
        public Input(InputStream stream)
        {
            this.stream=stream;
        }
        public static boolean isWhitespace(int c) 
        {
            boolean flag=false;
            if(c==' '|| c=='\n' || c=='\r' || c=='\t' || c==-1)
                flag=true;
            return flag;
        }
        public boolean isSpaceChar(int c) 
        {
            if (filter != null)
                return filter.isSpaceChar(c);
            return isWhitespace(c);
        }
        public int read()
        {
            if (numberChars==-1)
                throw new InputMismatchException();
            if (curChar>=numberChars) 
            {
                curChar = 0;
                try 
                {
                    numberChars = stream.read(Buffer);
                } 
                catch (IOException e) 
                {
                    throw new InputMismatchException();
                }
                if (numberChars <= 0)
                    return -1;
            }
            return Buffer[curChar++];
        }
        public int readInt() 
        {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            int sgn = 1;
            if (c == '-') 
            {
                sgn = -1;
                c = read();
            }
            int res = 0;
            do 
            {
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = read();
            } 
            while (!isSpaceChar(c));
            return res * sgn;
        }
        public char readCharacter() 
        {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            return (char)c;
        }
    }
    private static class Output
    {
        private final PrintWriter printer;
        public void printLine(Object...objects) 
        {
            print(objects);
            printer.println();
        }
        public void print(Object...objects) 
        {
            int i;
            for (i=0;i<objects.length;i++) 
            {
                if (i!=0)
                    printer.print(' ');
                printer.print(objects[i]);
            }
        }
        public Output(OutputStream outputStream)
        {
            printer= new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
        }
        public void flush()
        {
            printer.flush();
        }
        public void close()
        {
            printer.close();
        }
    }
    public static void main(String[] args)
    {
        Input in=new Input(System.in);
        Output out=new Output(System.out);
        int n=in.readInt();
        int m=in.readInt();
        int k=in.readInt();
        int i,j,a[][]=new int[n+1][m+1];
        int rIndex[]=new int[n+1];
        int cIndex[]=new int[m+1];
        for(i=1;i<=n;i++)
            rIndex[i]=i;
        for(i=1;i<=m;i++)
            cIndex[i]=i;
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                a[i][j]=in.readInt();
        for(i=0;i<k;i++)
        {
            char key=in.readCharacter();
            int r=in.readInt();
            int c=in.readInt();
            if(key=='g')
                out.printLine(a[rIndex[r]][cIndex[c]]);
            else if(key=='r')
            {
                int temp=rIndex[r];
                rIndex[r]=rIndex[c];
                rIndex[c]=temp;
            }
            else
            {
                int temp=cIndex[r];
                cIndex[r]=cIndex[c];
                cIndex[c]=temp;
            }
        }
        out.flush();
        out.close();
    }
}
