#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3f;
const int N = 1e5 + 9;
const int shift = 1e3 + 9;
const double Eps = 1e-7;
pair<long double, long double> a[N], c;
long double ang[N], angle, dist[N], bx, by;
int n, q, t1, t2;
pair<long double, long double> getC() {
  long double area = 0, cx = 0, cy = 0;
  for (int i = 0; i < n; i++) {
    long double temp =
        a[i].first * a[(i + 1) % n].second - a[i].second * a[(i + 1) % n].first;
    area += temp;
    cx += (a[i].first + a[(i + 1) % n].first) * temp;
    cy += (a[i].second + a[(i + 1) % n].second) * temp;
  }
  area /= 2;
  cx /= 6 * area;
  cy /= 6 * area;
  return pair<long double, long double>(cx, cy);
}
pair<long double, long double> getPoint(int idx) {
  return pair<long double, long double>(
      c.first + dist[idx] * cosl(angle + ang[idx]),
      c.second + dist[idx] * sinl(angle + ang[idx]));
}
long double getDist(pair<long double, long double> a,
                    pair<long double, long double> b) {
  return sqrtl((a.first - b.first) * (a.first - b.first) +
               (a.second - b.second) * (a.second - b.second));
}
int main(void) {
  if (fopen("in", "r") != NULL) {
    freopen("in", "r", stdin);
    freopen("out", "w", stdout);
  }
  scanf("%d%d", &n, &q);
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &t1, &t2);
    a[i].first = t1;
    a[i].second = t2;
  }
  bx = a[0].first, by = a[0].second;
  for (int i = 0; i < n; i++) {
    a[i].first -= bx;
    a[i].second -= by;
  }
  c = getC();
  for (int i = 0; i < n; i++) {
    dist[i] = getDist(a[i], c);
    ang[i] = atan2l(a[i].second - c.second, a[i].first - c.first);
    if (ang[i] < 0) ang[i] += 2 * PI;
  }
  angle = 0;
  int i = 0, j = 1, op, first, second;
  pair<long double, long double> top, nxt;
  while (q--) {
    scanf("%d", &op);
    if (op == 1) {
      scanf("%d%d", &first, &second);
      first--, second--;
      if (first == i) {
        i = second;
        top = getPoint(j);
        nxt = pair<long double, long double>(top.first, top.second - dist[j]);
      } else {
        j = second;
        top = getPoint(i);
        nxt = pair<long double, long double>(top.first, top.second - dist[i]);
      }
      angle += -PI / 2 - atan2l(c.second - top.second, c.first - top.first);
      while (angle < 0) angle += 2 * PI;
      while (angle >= 2 * PI) angle -= 2 * PI;
      c = nxt;
    } else {
      scanf("%d", &first);
      pair<long double, long double> ans = getPoint(first - 1);
      printf("%.10f %.10f\n", (double)(ans.first + bx),
             (double)(ans.second + by));
    }
  }
  return 0;
}
